WPF IdentityServer4 Неверный тип предоставления для клиента: код авторизации - PullRequest
0 голосов
/ 24 марта 2020

У меня проблема с настройкой IdentityServer4 для авторизации клиента WPF - ранее мне удалось использовать его с веб-сайтом с кодом. NET (В конце концов). Как и. NET Базовый сайт, я использую «Гибрид», но хотя веб-сайт возвращает тип гранта «authorization_code», приложение WPF падает. Вот выдержка из журнала:

      SELECT [c0].[Id], [c0].[ClientId], [c0].[RedirectUri]
      FROM (
          SELECT TOP(@__p_1) [c].[Id], [c].[AbsoluteRefreshTokenLifetime], [c].[AccessTokenLifetime], [c].[AccessTokenType], [c].[AllowAccessTokensViaBrowser], [c].[AllowOfflineAccess], [c].[AllowPlainTextPkce], [c].[AllowRememberConsent], [c].[AlwaysIncludeUserClaimsInIdToken], [c].[AlwaysSendClientClaims], [c].[AuthorizationCodeLifetime], [c].[BackChannelLogoutSessionRequired], [c].[BackChannelLogoutUri], [c].[ClientClaimsPrefix], [c].[ClientId], [c].[ClientName], [c].[ClientUri], [c].[ConsentLifetime], [c].[Created], [c].[Description], [c].[DeviceCodeLifetime], [c].[EnableLocalLogin], [c].[Enabled], [c].[FrontChannelLogoutSessionRequired], [c].[FrontChannelLogoutUri], [c].[IdentityTokenLifetime], [c].[IncludeJwtId], [c].[LastAccessed], [c].[LogoUri], [c].[NonEditable], [c].[PairWiseSubjectSalt], [c].[ProtocolType], [c].[RefreshTokenExpiration], [c].[RefreshTokenUsage], [c].[RequireClientSecret], [c].[RequireConsent], [c].[RequirePkce], [c].[SlidingRefreshTokenLifetime], [c].[UpdateAccessTokenClaimsOnRefresh], [c].[Updated], [c].[UserCodeType], [c].[UserSsoLifetime]
          FROM [Clients] AS [c]
          WHERE [c].[ClientId] = @__clientId_0
      ) AS [t]
      INNER JOIN [ClientRedirectUris] AS [c0] ON [t].[Id] = [c0].[ClientId]
dbug: IdentityServer4.EntityFramework.Stores.ClientStore[0]
      VTConsole found in database: True
dbug: IdentityServer4.Stores.ValidatingClientStore[0]
      client configuration validation for client VTConsole succeeded.
dbug: IdentityServer4.Validation.AuthorizeRequestValidator[0]
      Checking for PKCE parameters
fail: IdentityServer4.Validation.AuthorizeRequestValidator[0]
      Invalid grant type for client: authorization_code
{
        "ClientId": "VTConsole",
        "ClientName": "VTConsole Client",
        "RedirectUri": "http://localhost/VT_ConsoleCore",
        "AllowedRedirectUris": [
          "http://localhost/VT_ConsoleCore"
        ],
        "SubjectId": "anonymous",
        "ResponseType": "code",
        "ResponseMode": "query",
        "GrantType": "authorization_code",
        "RequestedScopes": "",
        "State": "pW44DAo0a5FM6jjnYCMaGQ",
        "Raw": {
          "response_type": "code",
          "nonce": "uddkyT-k7lbKpLfFArzmiw",
          "state": "pW44DAo0a5FM6jjnYCMaGQ",
          "code_challenge": "X-rkJyBEUWcS7_hrpVzsKQP5C-lC_Sd1Yll_xu195tA",
          "code_challenge_method": "S256",
          "client_id": "VTConsole",
          "scope": "LDH001 offline_access CMDS ",
          "redirect_uri": "http://localhost/VT_ConsoleCore"
        }
      }
fail: IdentityServer4.Endpoints.AuthorizeEndpoint[0]

Зарегистрированный здесь запрос возвращает client_id 7 и URI перенаправления http://localhost/VT_ConsoleCore - оба ожидаемые значения

Запись в ClientGrantTypes для Идентификатор 7 является гибридным.

ClientScopes имеет записи для LDH001, offline_access и CMDS, но хотя LDH001 является новым, он присутствует в APIScopes и APIResources.

Это то, как я вызываю IdentityServer4 из моего Кодовый код WPF:

            var options = new OidcClientOptions
            {
                Authority = this.config.p_Authority,
                ClientId = this.config.p_ClientId,
                RedirectUri = "http://localhost/VT_ConsoleCore",

                Browser = new WpfEmbeddedBrowser()
            };
            foreach (CScopeMasterBase scope in this.scopes)
            {
                options.Scope+= $"{scope.p_AddScopeFor} ";
            }


            _oidcClient = new OidcClient(options);

1 Ответ

0 голосов
/ 25 марта 2020

Оказывается, для опций нужна следующая дополнительная запись

                Flow = OidcClientOptions.AuthenticationFlow.Hybrid,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...