如何访问和使用Delegated Adal令牌

时间:2017-02-08 14:40:06

标签: authentication access-token adal

没有相关信息的原因可能是因为它应该是显而易见的,但我仍在努力。

StartUp.Auth.cs中使用ADAL登录我的AAD-tenant后,是否成功获取了令牌:

private async Task OnAuthorizationCodeReceivedAAD(AuthorizationCodeReceivedNotification notification)
        {
            var code = notification.Code;

            var credential = new ClientCredential(appId, appSecret);
            var userObjectId = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
            var context = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("https://login.microsoftonline.com/tenant.onmicrosoft.com/");

            var uri = new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path));

            var result = await context.AcquireTokenByAuthorizationCodeAsync(code, uri, credential);
        }

我可以在这里添加断点并查看令牌。我的问题是,我现在如何通过其他类的代码访问此令牌?例如,调用API。需要委托令牌,因此客户端凭据无法正常工作,这就是我可以找到的所有文档。

1 个答案:

答案 0 :(得分:2)

当我们使用它获取令牌时, AuthenticationContext 类会默认将令牌存储在缓存中。

然后我们可以使用AuthenticationContext authContext = new AuthenticationContext(authority); ClientCredential credential = new ClientCredential(clientId, secret); string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; AuthenticationResult result = await authContext.AcquireTokenSilentAsync(resource,credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId)); 根据资源和用户从缓存中检索令牌。此方法将从缓存中获取令牌,并在必要时续订令牌。以下是供您参考的示例:

php.ini