Получение идентификационного токена (id_token) в URI перенаправления (контроллер MVC) - PullRequest
0 голосов
/ 15 апреля 2019

Я надеюсь, что это в основном агностик из Okta (сервис, который мы используем для входа в социальные сети), но мне трудно найти документацию.Я использую .NET Core 2.0+, и мой Startup.cs выглядит следующим образом:

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddOpenIdConnect(options => 
    {
        //Configuration pulled from appsettings.json by default:
        options.ClientId = Configuration["okta:ClientId"];
        options.ClientSecret = Configuration["okta:ClientSecret"];
        options.Authority = Configuration["okta:Issuer"];
        options.CallbackPath = "/authorization-code/callback";
        options.ResponseType = OpenIdConnectResponseType.IdToken;
        options.SaveTokens = true;
        options.UseTokenLifetime = false;
        options.GetClaimsFromUserInfoEndpoint = true;
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("email");
    });

Форма входа в систему на сайте позволяет вам нажимать «Войти в Facebook» и процесс аутентификации через личностьпровайдер имеет место.Когда это подтверждается, оно возвращается к моему определенному перенаправлению «Домой / Безопасный».Когда перенаправление возвращается, id_token находится в URL как якорь:

https://localhost:5001/Home/Secure#id_token=XXXXXXX

Существует также вызов авторизации, который, как я вижу, происходит, который также получает ответ с id_token через разработчика Chrome.Консоль инструментов.Я не так хорошо знаком с .NET Core, поэтому мне трудно понять, как я могу получить этот id_token.

В запросе, похоже, нет id_token в параметрах Query или QueryString,так что я не вижу, где я могу взять его.

1 Ответ

0 голосов
/ 16 апреля 2019

Поскольку вы используете промежуточное ПО OIDC и устанавливаете для SaveTokens значение true, впоследствии вы сможете получить эти токены, вызвав GetTokenAsync для идентификатора токена, к которому вы хотите получить доступ, в контроллере:

string idToken = await HttpContext.GetTokenAsync("id_token");
...