Передача параметра на страницу входа в Identity Server 4 - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть клиентское приложение, которое использует IDSVR4 для аутентификации.Мне нужно сохранить имя пользователя пользователя (в процессе, отличном от входа через IDSVR) на клиенте в сеансе или в другом механизме хранения данных на стороне клиента, чтобы пользователю не приходилось вводить данные каждый раз, когда он входит в систему с этогоконкретный браузер.Как я могу передать имя пользователя от клиента на сервер идентификации?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете передать пользовательский параметр в конечную точку авторизации, пример кода вы можете найти в моем ответе здесь .

Если вы не используете промежуточное ПО OpenID Connect OWIN, вы можете напрямуюпоместите пользовательский параметр в запрос на авторизацию:

http://localhost:xxxx/account/login?returnUrl=/connect/authorize/callback?client_id=mvc2&redirect_uri=http%3A%2F%2Flocalhost%3A49459%2Fsignin-oidc&response_type=code%20id_token&scope=openid%20profile%20api1%20offline_access&response_mode=form_post&nonce=xxxx&state=xxxx

На стороне сервера идентификации вы можете проанализировать returnUrl и легко получить параметр.

0 голосов
/ 06 декабря 2018

Вы можете добавить имя пользователя к параметрам запроса.Если вы используете asp.net в клиенте, вы можете использовать событие уведомления RedirectToIdentityProvider, а затем добавить свое имя пользователя в ProtocolMessage.Примерно так:

RedirectToIdentityProvider = context =>
{
    context.ProtocolMessage.Parameters['username'] = "John";
    return Task.CompletedTask;
}

Любое значение, добавляемое к параметрам, будет доступно в IdentityServer с помощью метода IIdentityServerInteractionService GetAuthorizationContextAsync

Примерно так: в вашем контроллере IdentityServer:

public async Task<IActionResult> Login(string returnUrl){
    var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
    var username = context.Parameters['username'];
    ...
}
...