没有相关信息的原因可能是因为它应该是显而易见的,但我仍在努力。
在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。需要委托令牌,因此客户端凭据无法正常工作,这就是我可以找到的所有文档。
答案 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