Мы разрабатываем мультитенантное веб-приложение. Наши клиенты будут использовать Windows Azure Active Directory для аутентификации. Мы используем промежуточное ПО OWIN OpenIdConnect для аутентификации пользователей. В ответе, который мы получаем после процесса аутентификации, есть id_token и код авторизации.
Мы также хотим получить токен обновления, чтобы мы могли получать новые токены после истечения срока действия id_token. Поэтому в обработчике AuthorizationCodeReceived мы используем метод AcquireTokenByAuthorizationCode в библиотеке ADAL для получения токена обновления. Ответ содержит id_token, access_token и refresh_token.
Затем мы впоследствии используем referh_token для получения нового id_token, однако ответ содержит только обновленный access_token, но не обновленный id_token. Можно ли обновить id_token или мы можем обновить только access_token? Отрезанный код для обработчика полученного кода авторизации показан ниже.
AuthorizationCodeReceived = (context) =>
{
string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + "/";
var code = context.Code;
string clientSecret = ConfigurationManager.AppSettings["ida:Password"];
ClientCredential credential = new ClientCredential(clientId, clientSecret);
string tenantID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
MAuthenticationContext authContext = new MAuthenticationContext(string.Format("https://login.windows.net/{0}", tenantID), null);
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
code, new Uri(appBaseUrl), credential, "https://graph.windows.net");
AuthenticationResult refreshTokenResult = authContext.AcquireTokenByRefreshToken(result.RefreshToken, credential);
return Task.FromResult(0);
},