【问题标题】:IdentityServer 4 user-info endpoints returns forbidden statusIdentityServer 4 用户信息端点返回禁止状态
【发布时间】:2022-01-02 03:18:19
【问题描述】:

我刚开始使用 identityserver4,无法弄清楚为什么用户信息端点返回了禁止状态

    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
        {
             new Client
             {
               ClientId = "client1",
               AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
               ClientSecrets =
               {
                   new Secret("secret".Sha256())
               },
               AllowedScopes =
               {
                     "api1",
                     IdentityServerConstants.StandardScopes.OpenId,
                     IdentityServerConstants.StandardScopes.Profile,
               },
               IncludeJwtId = true,
               RequireConsent = false,
               AlwaysIncludeUserClaimsInIdToken = true,
               AlwaysSendClientClaims = true,

             }
        };
    }. 

我的用户:

    public static List<TestUser> GetUsers()
    {
        return new List<TestUser>
        {
            new TestUser
            {
              SubjectId = "1",
              Username = "admin",
              Password = "admin",
              Claims = new List<Claim>
              {
                  new Claim("Name", "test")
              }
            }
        };
    }

我是这样请求的:

        var disco = DiscoveryClient.GetAsync("https://localhost:44327").Result;
        var tokenClient = new TokenClient(disco.TokenEndpoint, "mvc", "secret");
        var tokenResponse = tokenClient.RequestResourceOwnerPasswordAsync("api1","admin","admin").Result;
        if (tokenResponse.IsError)
        {
            Console.WriteLine(tokenResponse.Error);
            return;
        }
        var client = new HttpClient();
        client.SetBearerToken(tokenResponse.AccessToken);

        var res =  client.GetAsync(disco.UserInfoEndpoint).Result;
        var claims = res.Content;

为什么我在 userinfo 端点中得到一个禁止的状态码? 任何帮助表示赞赏。

【问题讨论】:

    标签: c# identityserver4


    【解决方案1】:

    首先检查您的客户端配置。在GetClients() 中,您有一个ClientId = "client1",然后在令牌客户端构建中,您有var tokenClient = new TokenClient(disco.TokenEndpoint, "mvc", "secret");

    您的clientId 不正确。这是哪里来的mvc

    【讨论】:

      【解决方案2】:

      禁止响应也可能是范围不正确的结果,如果您想从 userinfo 端点获取有关用户的一些信息,则必须在使用的令牌中包含 OpenId 范围,当您解码令牌时,您必须具有里面的openid范围如图openid scope

      【讨论】:

        猜你喜欢
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 2023-03-06
        • 2022-01-22
        • 2020-04-07
        • 2018-02-12
        相关资源
        最近更新 更多