我正在根据https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnect上的入职示例代码处理一些代码。
我已在https://apps.dev.microsoft.com/注册该应用,这意味着我需要使用oauth v2.0端点。
我已更改初始登录请求以使用有效的/oauth2/v2.0/authorize端点,并在我的控制器中触发ProcessCode方法。我得到了代码,id_token并陈述回来。
然后在ProcessCode控制器操作中,我调用AuthenticationContext.AcquireTokenByAuthorizationCodeAsync方法。 这将是/ common / oauth2 / token并返回 “错误”:“invalid_grant” “error_description”:“AADSTS70000:身份验证失败:授权码格式错误或无效。”
我猜这是因为代码是由v2.0端点发出的,而获取令牌请求需要转到/common/oauth2/v2.0/token端点?
所以问题是如何让AuthenticationContext使用v2.0端点?这已经让我疯了几天了。
BTW使用Microsoft.IdentityModel.Clients.ActiveDirectory版本3.10.305231913
由于
敦尔
答案 0 :(得分:1)
使用为验证v2.0端点而构建的Microsoft身份验证库。您可以在此处找到它:https://www.nuget.org/packages/Microsoft.Identity.Client
在此库中,AuthenticationContext已替换为ConfidentialClientApplication和PublicClientApplication。在您的情况下,由于您在作为机密客户端的网络服务器中获取令牌,因此您需要执行以下操作:
scopes = new string[] { "https://outlook.office.com/mail.read" }
var ctx = new ConfidentialClientApplication(clientId, redirectUri, clientCredential, tokenCache);
var t = await ctx.AcquireTokenByAuthorizationCodeAsync(scopes, authorizationCode);
使用访问令牌将范围替换为您想要访问的内容。 请记住,虽然v2.0端点中只有一组有限的范围(来自Outlook API和MS Graph的邮件,日历和联系人)。
修改强> MS Graph中的所有范围现在都可以在v2端点中使用。