1

OAuth2.0、OIDC1.0、およびIdentityServer4を把握しています。 "openid"スコープだけが要求されるテストMVCコアクライアントをセットアップしました。しかし、何らかの形でOpenIdConnnectミドルウェアは、要求されたスコープに "profile"スコープを追加し続けます。 "profile"は必須のスコープですか?私はそれを有効にする必要がありますか?それとも私はここで間違っているの?私はどんな入力にも感謝します。OpenIdConnectミドルウェアは、要求に「プロファイル」スコープを追加し続けます。

IdSrv資源:

_identityResources = new List<IdentityResource> 
      { 
       new IdentityResources.OpenId(), 
       new IdentityResource 
       { 
        Name = "test_user", 
        UserClaims = new[] { "test_user.email" } 
       } 
      }; 

      _apiResources = new List<ApiResource> 
      { 
       new ApiResource 
       { 
        Name = "test_api", 
        Scopes = 
        { 
         new Scope() 
         { 
          Name = "test_api.account.create", 
          UserClaims = new[] { "test_api.account.create" } 
         } 
        } 
       } 
      }; 

IdSrvクライアントの設定:

new Client 
       { 
        ClientId = "client.mvcx", 
        ClientName = "MVC Core Client", 
        AllowedGrantTypes = GrantTypes.Hybrid, 
        AllowAccessTokensViaBrowser = false, 

        ClientSecrets = 
        { 
         new Secret("secret".Sha256()) 
        }, 

        RedirectUris = { Common.Addresses.Client + "/signin-oidc" }, 
        PostLogoutRedirectUris = { Common.Addresses.Client }, 
        LogoutUri = Common.Addresses.Client + "/signout-oidc", 

        AllowedScopes = 
        { 
         IdentityServerConstants.StandardScopes.OpenId 
        }, 
        AllowOfflineAccess = false, 
        RequireConsent = false, 

        AlwaysIncludeUserClaimsInIdToken = true 

       }, 

MVCクライアント:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationScheme = "cookies", 
       AutomaticAuthenticate = true, 
       ExpireTimeSpan = TimeSpan.FromMinutes(60) 
      }); 

      JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 

      app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
      { 
       AuthenticationScheme = "oidc", 
       SignInScheme = "cookies", 

       Authority = Common.Addresses.IdSrv, 
       RequireHttpsMetadata = false, 

       ClientId = "client.mvcx", 
       ClientSecret = "secret", 

       ResponseType = "code id_token", 
       Scope = { "openid" }, 

       SaveTokens = true, 

       TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters 
       { 
        NameClaimType = IdentityModel.JwtClaimTypes.Name, 
        RoleClaimType = IdentityModel.JwtClaimTypes.Role, 
       }, 

IdSrvエラー:

info: IdentityServer4.Hosting.IdentityServerMiddleware[0] 
     Invoking IdentityServer endpoint: IdentityServer4.Endpoints.AuthorizeEndpoint for /connect/authorize 
fail: IdentityServer4.Validation.ScopeValidator[0] 
     Invalid scope: profile 
fail: IdentityServer4.Endpoints.AuthorizeEndpoint[0] 
     Request validation failed 
info: IdentityServer4.Endpoints.AuthorizeEndpoint[0] 
     { 
     "ClientId": "client.mvcx", 
     "ClientName": "MVC Core Client", 
     "RedirectUri": "http://localhost:32579/signin-oidc", 
     "AllowedRedirectUris": [ 
      "http://localhost:32579/signin-oidc" 
     ], 
     "SubjectId": "anonymous", 
     "ResponseType": "code id_token", 
     "ResponseMode": "form_post", 
     "GrantType": "hybrid", 
     "RequestedScopes": "openid profile", 
... 

答えて

0

OpenIdConnectionOptionsが自動的Scope財産上のプライベートセッターとopenidprofileスコープを(source codeを参照)、要求します。

あなたのようにスコープを設定すると、新しいリストを設定するのではなく、既存のリストに追加します。スコープを追加

クリアしてからは作品:

var options = new OpenIdConnectOptions(); 
options.Scope.Clear(); 
options.Scope.Add("openid"); 
app.UseOpenIdConnectAuthentication(options); 
+3

またはIOWは - あなたのための最高の何を知るために、Microsoftに感謝します。 – leastprivilege

関連する問題