我正在根据https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnect上的入门示例代码处理一些代码 .
我在https://apps.dev.microsoft.com/注册了应用程序,这意味着我需要使用oauth v2.0 endpoints .
我已经更改了初始登录请求以使用有效的/oauth2/v2.0/authorize endpoints ,并在我的控制器中触发ProcessCode方法 . 我得到了代码,id_token和状态 .
然后在ProcessCode控制器操作中,我调用AuthenticationContext.AcquireTokenByAuthorizationCodeAsync方法 . 这将是/ common / oauth2 / token并返回“error”:“invalid_grant”,“error_description”:“AADSTS70000:身份验证失败:授权代码格式错误或无效 . ”
我猜这是因为代码是由v2.0 endpoints 发出的,而获取令牌请求需要转到/common/oauth2/v2.0/token endpoints ?
所以问题是如何让AuthenticationContext使用v2.0 endpoints ?这让我疯了好几天了 .
BTW使用Microsoft.IdentityModel.Clients.ActiveDirectory版本3.10.305231913
谢谢
多纳尔
1 回答
使用Microsoft身份验证库,该库是为与v2.0 endpoints 一起使用而构建的 . 你可以在这里找到它:https://www.nuget.org/packages/Microsoft.Identity.Client
在此库中,AuthenticationContext已替换为ConfidentialClientApplication和PublicClientApplication . 在您的情况下,由于您在Web服务器(即机密客户端)中获取令牌,因此您需要执行以下操作:
将范围替换为您希望使用访问令牌访问的任何内容 . 请记住,虽然v2.0 endpoints 中只有一组有限的范围(来自Outlook API和MS Graph的邮件,日历和联系人) .
EDIT MS Graph中的所有范围现在都在v2 endpoints 中可用 .