0

Я хотел бы получить ID Token, который я могу отправить через запрос GET/POST другому приложению после успешной аутентификации.Получить идентификатор ID для отправки другому приложению

Сценарий следующие:

  • Несколько веб-приложений, использующих разные адреса (* .domain.com)
  • Все приложения требуют аутентификации против Azure Active Directory
  • Слишком много URL, чтобы поместить их всех, как redirect_url (понадобится один для каждого имени хоста)
  • Идея состоит в том, чтобы иметь приложение «login» (login.domain.com), которое обрабатывает логин, а затем пересылает токен идентификатора в приложения * .domain.com (используя URL-адрес в поле состояния)
  • * .domain.com затем проверяет идентификатор токена и разрешает пользователям

Использование Microsoft.AspNetCore.Authentication.OpenIdConnect, я не могу понять, как получить идентификатор токена, чтобы я мог направить его должным образом.

Я использовал VS2015 шаблон для ASP.NET ядра 1.0 веб-приложения и настройки проверки подлинности должным образом (это работает)

Теперь мне нужно получить токен как-то, но я не могу понять, каким образом.

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions() 
     { 
      ClientId = Configuration["Authentication:AzureAd:ClientId"], 
      Authority = Configuration["Authentication:AzureAd:AADInstance"] + "Common", 
      CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 

      TokenValidationParameters = new TokenValidationParameters 
      { 
       // Instead of using the default validation (validating against a single issuer value, as we do in line of business apps), 
       // we inject our own multitenant validation logic 
       ValidateIssuer = false, 

       // If the app is meant to be accessed by entire organizations, add your issuer validation logic here. 
       //IssuerValidator = (issuer, securityToken, validationParameters) => { 
       // if (myIssuerValidationLogic(issuer)) return issuer; 
       //} 
      }, 
      Events = new OpenIdConnectEvents 
      { 
       OnTicketReceived = (context) => 
       { 
        // If your authentication logic is based on users then add your logic here 
        return Task.FromResult(0); 

       }, 
       OnAuthenticationFailed = (context) => 
       { 
        context.Response.Redirect("/Home/Error"); 
        context.HandleResponse(); // Suppress the exception 
        return Task.FromResult(0); 
       }, 
       // If your application needs to do authenticate single users, add your user validation below. 
       //OnTokenValidated = (context) => 
       //{ 
       // return myUserValidationLogic(context.Ticket.Principal); 
       //} 
      } 
     }); 

Я предполагаю, что я должен быть в состоянии получить его в OnTicketReceived случае с помощью TicketReceivedContext?

ответ

1

Я использовал неправильное событие. В случае с событием OnTokenValidated вы получаете доступ к context.SecurityToken.RawData, являющемуся сырым токеном, который был получен, и это именно то, что мне нужно.

0

Вы также можете попробовать это:

string idToken = string.Empty; 
if (ctx.Properties.Items.ContainsKey(".Token.id_token")) 
{ 
    idToken = ctx.Properties.Items[".Token.id_token"]; 
}