Утверждения в ASP.NET Web API с ADFS4 и OpenID Connect - AcquireTokenByAuthorizationCodeAsync vs AcquireTokenSilentAsync - PullRequest
0 голосов
/ 17 сентября 2018

Может кто-нибудь объяснить, пожалуйста, разницу между 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

...