OWIN — Тип ответа против при получении кода авторизации

#asp.net-mvc #single-sign-on #owin #keycloak #openid-connect

Вопрос:

Я использую от KeyCloak для единого входа (Единый вход). И у меня есть MVC.NET проект для использования из него. Так что у меня есть это для отправленного запроса:

 new OpenIdConnectAuthenticationOptions
{
     ClientId = client_id,
     Authority = issuer_url,
     RedirectUri = redirect_uri,
     PostLogoutRedirectUri = redirect_uri,
     Scope = OpenIdConnectScope.OpenIdProfile,
     ResponseType = OpenIdConnectResponseType.CodeIdToken,
     ClientSecret = secret,
     SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
     Notifications = new OpenIdConnectAuthenticationNotifications
     {
           AuthorizationCodeReceived = OnAuthorizationCodeReceived,
           AuthenticationFailed = OnAuthenticationFailed
     },
});
 

=> И я получаю код OnAuthorizationCodeReceived():

     private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification n)
    {
        var client = new HttpClient();
        var tokenResponse = await client.RequestAuthorizationCodeTokenAsync(new AuthorizationCodeTokenRequest
        {
            Code = n.Code,
            Address = token_endpoint_url,
            ClientId = client_id,
            ClientSecret = secret,
            RedirectUri = redirect_uri,
        });

        if (tokenResponse.IsError)
            throw new Exception(tokenResponse.Error);

        var response = await client.GetUserInfoAsync(new UserInfoRequest
        {
            Token = tokenResponse.AccessToken,
            Address = userinfo_endpoint,
        });

        if (response.IsError)
            throw new Exception(response.Error);

        n.AuthenticationTicket.Identity.AddClaims(response.Claims);
    }
 

Когда я использую код только типа ответа, n.Проверка подлинности имеет значение NULL. и я должен установить тип ответа как codeIdtoken, чтобы получить n.Проверка подлинности, и я заполняю заявки. Также я должен включить гибридный поток на клавиатуре.

Я не хочу изменять свой код при изменении потоков (включен стандартный поток или включен неявный поток).

Возможно ли, что я получу n.Билет для проверки подлинности в файле responseType.Code?

Примечание: Я не t have any problem on get кодирую also ответ на токен.Доступ открыт, но моя проблема только в n.Билет на проверку подлинности.

Если это невозможно, каково стандартное решение для заполнения претензий?

Ответ №1:

если вы просто используете код типа ответа, вы получите маркер доступа или код авторизации, но они не связаны с билетом проверки подлинности.

Билет проверки подлинности создается на основе ID-токена, поскольку он содержит сведения о пользователе. Поэтому вам нужно использовать код id_token, чтобы заставить его работать.

Для современного приложения и в соответствии с лучшими практиками вы должны стремиться использовать только поток кода авторизации или поток учетных данных клиента.

Некоторые части стандартов больше не считаются безопасными, и если вы следуете OAuth 2.1, то рекомендуется использовать два приведенных выше потока.

OAuth 2.1 — это краткое изложение OAuth 2.0 / — всех лучших практик, которые были установлены с момента выпуска 2.0.

Например, Неявный грант (response_type=токен) в этой спецификации опущен. Вы все еще можете использовать его, но это больше не считается лучшей практикой.

Комментарии:

1. Привет. Я не могу понять вашего последнего заявления? «Для современного приложения и в соответствии с лучшими практиками вы должны стремиться использовать только поток кода авторизации или поток учетных данных клиента». Пожалуйста, объясните подробнее. Спасибо У.

2. Обновил свой ответ, и это приемлемый ответ?