Сервер идентификации 4 выдает ошибку перенаправления uri not define error - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь подключить клиент веб-формы asp. net к серверу идентификации 4 для аутентификации и авторизации. Когда пользователь перенаправляется на сервер идентификации для входа в систему, я получаю сообщение об ошибке, а в журнале сервера идентификации говорится, что «redirect_uri отсутствует или слишком длинный», но я определил uri перенаправления в конфигурации клиента. Не уверены, почему возникает ошибка на стороне сервера идентификации?

Конфигурация клиента:

     new Client {
            ClientId = "testclient1",
            ClientSecrets = { new Secret("client_secret_webform".ToSha256()) },

            AllowedGrantTypes = GrantTypes.Implicit,
            RequirePkce = true,

            RedirectUris = { "http://localhost:54602/signin-oidc" },
            PostLogoutRedirectUris = { "http://localhost:54602/signin-oidc" },

            AllowedScopes = {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
            },

             AllowAccessTokensViaBrowser = true,
            RequireConsent = false,
        }

Настройка клиента Webform

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = "testclient1",
        Authority = "https://localhost:44314/",
        ClientSecret = "client_secret_webform",
        ResponseType = "id_token token",
        SaveTokens = true

    });

   }

IdentityServer4.Validation.AuthorizeRequestValidator: Ошибка : redirect_uri отсутствует или слишком длинный

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Попробуйте изменить настройки OpenID Connect на клиенте, чтобы добавить RedirectUri и PostLogoutRedirectUri, например:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = "testclient1",
        Authority = "https://localhost:44314/",
        ClientSecret = "client_secret_webform",
        ResponseType = "id_token token",
        SaveTokens = true,
        RedirectUri = "http://localhost:54602/signin-oidc", 
        PostLogoutRedirectUri = "http://localhost:54602/signin-oidc",

    });

   }

Также, как упоминалось в другом ответе, используйте Fiddler или активируйте журнал, чтобы проверить значения, отправленные в IDS4

1 голос
/ 10 июля 2020

URI перенаправления, который вы настраиваете в IdentityServer, отличается от того, который вы фактически используете в запросе клиента. Захватите свой запрос, чтобы увидеть этот URI перенаправления.

Исключение может быть вызвано двумя причинами:

  1. Uri перенаправления пустой, пустой или пробел
  2. URI перенаправления длиннее максимально допустимого. Значение по умолчанию - 400.

Это значение можно изменить в IdentityServerOptions:

services
    .AddIdentityServer(options =>
    {
        options.InputLengthRestrictions.RedirectUri = 1000;
        ...
    }
    ...
...
1 голос
/ 10 июля 2020

Самый простой способ определить правильный redirectUrl - найти запрос к конечной точке Authenticate в Fiddler и посмотреть, какой RedirectUrl обработчик OpenIDConnect отправляет на IdentityServer.

In Fiddler затем вы можете найти redirect_uri, который должен точно соответствовать URL-адресу, определенному в IdentityServer

введите описание изображения здесь

...