c# - Azure AD 的 Active Directory 身份验证异常 (AADSTS90027)

标签 c# asp.net-mvc authentication authorization azure-active-directory

我有一个 native 客户端应用程序正在获取用于 Active Directory 授权的 OAuth2 token 。然后它将使用该 token 与安全的 Web API 服务器通信,其中 API 的某些区域使用 [Authorize] 属性进行保护。服务器也注册了 Azure AD,可以通过 AD 正确授权请求。

当我尝试获取 token 时,在下面代码的第 2 行出现以下异常:

Additional information: invalid_request: AADSTS90027: The client '<Client GUID>' and resource 'https://abccompany.com/MyApplication.Server' identify the same application.

这是我在 native 客户端中运行的代码(目前只是按下按钮作为测试)。显然 GUID 和公司名称已被混淆。

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/abccompany.com");
AuthenticationResult ar = ac.AcquireToken("https://abccompany.com/MyApplication.Server", "<Client GUID>", new Uri("https://localhost:44300/secure"), PromptBehavior.Auto);

我确保重定向存在于 Azure 中的应用程序配置中(否则会出现重定向错误)。错误是什么意思?

最佳答案

您似乎正在使用 WebAPI 的 clientId,您需要在其中提供客户端应用程序的 clientId。请在代表客户端应用程序的 Azure AD 中注册一个单独的“ native 客户端应用程序”。

以下主题说明了协议(protocol)流程以及如何在 Azure AD 中注册 WebAPI,以便来自多个 AD 租户的用户可以使用该 API:http://msdn.microsoft.com/en-us/library/azure/dn499820.aspx#BKMK_Native 以下示例应该可以帮助您完成:

希望这对您有所帮助。


ps:当客户端和资源是同一个应用程序时,Azure AD 不会颁发 token 。在您的情况下,它们确实应该不同,资源 clientid(发给 secret 客户端)不应用作公共(public)客户端 - 但是对于服务到服务场景,可以认为应该允许向自己发布 token - 这是我们正在调查。

关于c# - Azure AD 的 Active Directory 身份验证异常 (AADSTS90027),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455877/

相关文章:

C# 从 IList 中选择元素

c# - 通用 IEnumerable

c# - 授权后如何替换 ASP.NET Core 中的 HttpContext.User?

c# - 如何返回 LINQ 结果并显示在 View 中?

javascript - 什么是 jQuery Unobtrusive Validation?

java - 在Jetty服务器中如何获取需要客户端认证时使用的客户端证书?

c# - 将接口(interface)与 DbSet 一起使用,是否可以与 EF Core 一起使用?

asp.net-mvc - 如何在 Web Api 中将对象作为参数传递

java - 应用引擎 : creating my own UserService?

javascript - 从回调中访问 jwtFromRequest