#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. Обновил свой ответ, и это приемлемый ответ?