Как добавить параметр URL при перенаправлении на провайдера идентификации - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы добавить параметр login_hint при перенаправлении в Azure AD. Причина в том, что я уже знаю имя пользователя и не хочу, чтобы пользователю приходилось указывать его снова.

В Identity Server мы настраиваем поставщиков удостоверений следующим образом:

services.AddAuthentication()
    .AddOpenIdConnect()

С контроллера аккаунта мы можем вызвать новый логин у провайдера идентификации, позвонив по номеру:

var properties = this.signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, userId);

return this.Challenge(properties, provider);

Но как мы можем включить дополнительные параметры в провайдера и, более конкретно, в URL, на который будет перенаправлен пользователь? В AuthenticationProperties есть словарь, в который мы можем добавить произвольные данные, поэтому я думаю, что мы можем использовать их где-то до того, как пользователь будет перенаправлен.

Я знаю, что в сообщении протокола есть свойства whr и domain_hint (вроде того, чего я хочу достичь), но где и когда мы можем получить к ним доступ или добавить пользовательские параметры в конвейер?

1 Ответ

0 голосов
/ 13 сентября 2018

Через некоторое время после публикации я нашел решение.Сначала я добавляю userId в AuthenticationProperties.

var properties = this.signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, userId);

properties.Items["userId"] = userId;

return this.Challenge(properties, provider);

. При регистрации провайдера идентификации в OpenIdConnectOptions происходит событие, в котором мы можем установить LoginHint.

services.AddAuthentication()
    .AddOpenIdConnect("test", "test", options =>
    {
        options.Authority = "xxx";
        options.ClientId = "xxx";
        options.Scope.Add(IdentityServerConstants.StandardScopes.OpenId);
        options.Scope.Add(IdentityServerConstants.StandardScopes.Profile);
        options.Scope.Add(IdentityServerConstants.StandardScopes.Email);
        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = ClaimsIdentity.DefaultNameClaimType,
            RoleClaimType = ClaimsIdentity.DefaultRoleClaimType
        };
        options.Events.OnRedirectToIdentityProvider = ctx =>
        {
            if (ctx.Properties.Items.TryGetValue("userId", out var userId))
            {
                ctx.ProtocolMessage.LoginHint = userId;
            }

            return Task.CompletedTask;
        };
    });
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...