我有一个 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 以下示例应该可以帮助您完成:
- 单租户 WebAPI:https://github.com/AzureADSamples/NativeClient-WindowsStore
- Multi-Tenancy WebAPI:https://github.com/AzureADSamples/NativeClient-WebAPI-MultiTenant-WindowsStore
希望这对您有所帮助。
ps:当客户端和资源是同一个应用程序时,Azure AD 不会颁发 token 。在您的情况下,它们确实应该不同,资源 clientid(发给 secret 客户端)不应用作公共(public)客户端 - 但是对于服务到服务场景,可以认为应该允许向自己发布 token - 这是我们正在调查。
关于c# - Azure AD 的 Active Directory 身份验证异常 (AADSTS90027),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455877/