Может кто-нибудь объяснить, пожалуйста, разницу между AcquireTokenByAuthorizationCodeAsync и AcquireTokenSilentAsync?
В частности, я пытаюсь понять, почему дополнительные утверждения, которые я получаю от ADFS4, доступны только после вызова AcquireTokenSilentAsync. Пожалуйста, смотрите ниже пример кода и значения времени выполнения:
private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification context)
{
AuthenticationContext ac = new AuthenticationContext(GlobalVariables.authority, false,
new InMemoryTokenCache(context.AuthenticationTicket.Identity.Name));
AuthenticationResult ar = await ac.AcquireTokenByAuthorizationCodeAsync(context.Code, new Uri(GlobalVariables.redirectUri),
new ClientCredential(GlobalVariables.clientId, GlobalVariables.appKey), APIProxy.ConnectApiUri);
string idTokenBefore = ar.IdToken;
ar = await ac.AcquireTokenSilentAsync(APIProxy.ConnectApiUri,
new ClientCredential(GlobalVariables.clientId, GlobalVariables.appKey), UserIdentifier.AnyUser);
string idTokenAfter = ar.IdToken;
}
JWT, расшифрованный в каждом случае, показан ниже.
idTokenBefore:
{
"aud": "ff<hidden>31",
"iss": "https://<hidden>/adfs",
"iat": 1537172193,
"exp": 1537175793,
"auth_time": 1537172193,
"nonce": "636727689959828428.",
"sub": "6sV<hidden>Wc=",
"upn": "admin",
"unique_name": "admin",
"sid": "0b<hidden>a6"
}
idTokenAfter:
{
"aud": "ff<hidden>31",
"iss": "https://<hidden>/adfs",
"iat": 1537172282,
"exp": 1537175882,
"auth_time": 1537172193,
"sub": "6sV<hidden>Wc=",
"sid": "b8<hidden>ee",
"upn": "admin",
"unique_name": "admin",
"anchor": "upn",
"http://<hidden>/claims/userguid": "zqE<hidden>A==",
"http://<hidden>/claims/userPrincipalName": "admin",
"http://<hidden>/claims/surname": "<hidden>",
"http://<hidden>/claims/givenname": "<hidden>",
"http://<hidden>/claims/displayName": "<hidden>",
"http://<hidden>/claims/greetings": "<hidden>",
"http://<hidden>/claims/email": "<hidden>",
"http://<hidden>/claims/phone": "1234567",
"http://<hidden>/claims/languageCode": "en",
"authmethod": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
"amp": "FormsAuthentication",
"throttled": "false",
"amr": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
"appid": "ff<hidden>31",
"apptype": "Confidential",
"endpointpath": "/adfs/oauth2/token",
"insidecorpnetwork": "true",
"clientreqid": "c0<hidden>e8",
"clientip": "192.168.<hidden>",
"userip": "192.168.<hidden>",
"ver": "1.0",
"scp": "openid"
}
Я не понимаю, почему ADFS не возвращает весь список утверждений при первом вызове; на вызов AcquireTokenByAuthorizationCodeAsync?
Спасибо,
George