如何让AuthenticationContext使用v2.0端点?

时间:2016-06-17 14:37:57

标签: oauth-2.0 openid azure-active-directory openid-connect adal

我正在根据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

由于

敦尔

1 个答案:

答案 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端点中使用。