Результат AddInMemoryClients в неизвестном клиенте или не включен - PullRequest
2 голосов
/ 14 января 2020

Я пытаюсь заставить Identity Server 4 работать в ASP Net Core 3-приложении с Angular 8 SPA, используя "oidc-client": "1.10.1".

Если я добавлю следующее в мой appsettings. json

  "IdentityServer": {
    "Key": {
      "Type": "File",
      "FilePath": "acertificate.pfx",
      "Password": "notmyrealpassword..orisit?"
    },
    "Clients": {
      "dev-client": {
        "Profile": "IdentityServerSPA",
      }
    }
  }

Используя этот клиент:

 {
      authority: 'https://localhost:5001/',
      client_id: 'dev-client',
      redirect_uri: 'http://localhost:4200/auth-callback',
      post_logout_redirect_uri: 'http://localhost:4200/',
      response_type: 'id_token token',
      scope: 'openid profile API',
      filterProtocolClaims: true,
      loadUserInfo: true
  }

Я получаю: Invalid redirect_uri: http://localhost:4200/auth-callback

добавление.

"dev-client": {
  "Profile": "IdentityServerSPA",
  "RedirectUris": [ "http://localhost:4200/auth-callback" ]
}

ничего не делает. Если я добавлю конфигурацию клиента, скопированную (почти) из документации

"Clients": [
  {
    "Enabled": true,
    "ClientId": "dev-client",
    "ClientName": "Local Development",
    "AllowedGrantTypes": [ "implicit" ],
    "AllowedScopes": [ "openid", "profile", "API" ],
    "RedirectUris": [ "http://localhost:4200/auth-callback" ],
    "RequireConsent": false,
    "RequireClientSecret": false
  }
]

, я получу: System.InvalidOperationException: 'Type '' is not supported.' при запуске

Если я попытаюсь настроить клиент в коде и сохранить только Раздел «Ключ» в настройках приложения

services
.AddIdentityServer(options =>
{
    options.Cors.CorsPolicyName = _CorsPolicyName;
})
.AddInMemoryClients(new IdentityServer4.Models.Client[] {
new IdentityServer4.Models.Client
{
    ClientId = "dev-client",
    ClientName = "JavaScript Client",
    ClientUri = "http://localhost:4200",

    AllowedGrantTypes = { IdentityModel.OidcConstants.GrantTypes.Implicit },
    AllowAccessTokensViaBrowser = true,

    RedirectUris = { "http://localhost:4200/auth-callback" },
    PostLogoutRedirectUris = { "http://localhost:4200" },
    AllowedCorsOrigins = { "http://localhost:4200" },

    AllowedScopes =
    {
        IdentityServer4.IdentityServerConstants.StandardScopes.OpenId,
        IdentityServer4.IdentityServerConstants.StandardScopes.Profile,
        IdentityServer4.IdentityServerConstants.StandardScopes.Email,
        "API"
    }
}
})

Я получаю: Unknown client or not enabled: dev-client.

Кто-то помогает мне сохранять здравомыслие и указывает на мою, наиболее вероятную, очевидную ошибку.

1 Ответ

1 голос
/ 27 марта 2020

ASP. NET Идентификация переопределяет документированный метод настройки клиентов IdentityServer, ожидая словарь известных значений . Вы можете обойти это, создав раздел , а не с именем Clients и явно прочитав его. Кроме того, AddApiAuthorization предоставляет коллекцию Clients в ApiAuthorizationOptions, которую можно использовать для добавления других клиентов:

.AddApiAuthorization<...>(options =>
            {
                options.Clients.AddRange(Configuration.GetSection("IdentityServer:OtherClients").Get<Client[]>());
            });
...