我目前正在使用this example在C#中登录Microsoft图表。我不确定这在内部使用什么类型的令牌,所以我的主要问题是:我是否需要担心刷新令牌的超时? 我发现this page关于配置刷新令牌生命周期 - 我是否需要更改这些? 如果我在应用程序租户中更改它们,它们是否也会设置在我在注册我的应用程序的租户中?
初始身份验证的工作原理如下(完整代码here):
reader.getValue(0)
我稍微修改了授权过程,因此我可以使用https://github.com/Azure-Samples/active-directory-dotnet-graphapi-web中的方法:
AuthorizationCodeReceived = async (context) =>
{
// We received an authorization code => get token.
var code = context.Code;
ClientCredential credential = new ClientCredential(clientId, appKey);
string tenantID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}", tenantID), new EFADALTokenCache(signedInUserID));
AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(
code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path).TrimEnd('/')), credential, graphResourceID);
}
我从上面的代码得到的(Bearer)AccessToken有一个ExpirationDate,它等于请求的时间并且很长 - 所以在认证过程中真正发生的事情对我来说似乎是一个黑盒子,我很想理解它
答案 0 :(得分:0)
简答:是的。
答案很长:您正在使用的库(ADAL)将尽一切可能使您的刷新令牌(以及您的用户会话)尽可能长时间有效。每次拨打AcquireToken*
时,它都会为您处理令牌刷新。但是,最终刷新令牌将会到期。什么时候它们到期是你的控制(作为开发人员)。您可以使用您引用的链接设置默认值,但客户可以始终覆盖这些默认值。刷新令牌也可能因其他原因而失效,例如,如果用户撤消您的应用或您的应用被识别为可能是恶意的。
因此,您需要处理ADAL无法为您获取令牌的情况。在ADAL中,这将导致异常,您可以正常处理并重定向用户再次登录,在那里他们可以纠正导致刷新令牌过期的任何情况。