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





Вы можете добавить имя пользователя в параметры запроса. Если вы используете asp.net в клиенте, вы можете использовать событие уведомления RedirectToIdentityProvider, а затем добавить свое имя пользователя в ProtocolMessage. Что-то вроде этого:
RedirectToIdentityProvider = context =>
{
context.ProtocolMessage.Parameters['username'] = "John";
return Task.CompletedTask;
}
Любое значение, которое вы добавляете к параметрам, будет доступно в IdentityServer через метод IIdentityServerInteractionServiceGetAuthorizationContextAsync.
Вот так в вашем контроллере IdentityServer:
public async Task<IActionResult> Login(string returnUrl){
var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
var username = context.Parameters['username'];
...
}
Вы можете передать пользовательский параметр в конечную точку авторизации, пример кода вы можете найти в моем ответе здесь.
Если вы не используете промежуточное ПО 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 и легко получить параметр.
Спасибо за это, извините, мне потребовалось время, чтобы отметить эту работу, которая меня настигла. Также оба ответа были отличными, отмеченными для полноты и ясности в реализации.