Asp.net core 无法从客户端访问IdentityServer4文档示例中的UserInfo终结点

Asp.net core 无法从客户端访问IdentityServer4文档示例中的UserInfo终结点,asp.net-core,openid-connect,identityserver4,Asp.net Core,Openid Connect,Identityserver4,我正在测试IdentityServer4,浏览文档以了解更多关于OAuth2、OpenId Connect和基于声明的身份验证的信息,所有这些我都是新手。然而,一些示例代码行为怪异,我不明白为什么 因此,根据我的理解,当获得访问用户数据的权限时,客户端可以访问UserInfo端点,该端点包含声明等数据 在IdentityServer4中甚至有一个设置 GetClaimsFromUserInfoEndpoint 文档建议我们设置为true 因此,我遵循IdentityServer4启动指南,在某

我正在测试IdentityServer4,浏览文档以了解更多关于OAuth2、OpenId Connect和基于声明的身份验证的信息,所有这些我都是新手。然而,一些示例代码行为怪异,我不明白为什么

因此,根据我的理解,当获得访问用户数据的权限时,客户端可以访问UserInfo端点,该端点包含声明等数据

在IdentityServer4中甚至有一个设置

GetClaimsFromUserInfoEndpoint
文档建议我们设置为true

因此,我遵循IdentityServer4启动指南,在某一点之前,一切都很完美。包含提供的示例代码,尽管我假设我遗漏了一些明显的内容,并且不需要查看代码

根据正在运行的服务器的openId配置页面,userinfo端点位于 当我试图通过浏览器访问它时,我看到一个导航栏,声称我已登录,但页面主体是一个登录提示。看起来很奇怪,但我假设这是因为我是在localhost:5000(IdentityServer4)登录的,但我没有发送我在localhost:5002上为客户端获得的userId令牌

因此,我在我的客户端应用程序上编写了以下代码:

    public async Task<IActionResult> GetData()
    {
        var accessToken = HttpContext.Authentication.GetTokenAsync("access_token").Result;
        HttpClient client = new HttpClient();
        client.SetBearerToken(accessToken);

        var userInfo = await client.GetStringAsync("http://localhost:5000/connect/userinfo");

        return Content(userInfo);
    }

然而,问题依然存在,即使UserInfoClient内部的封装代码也会撞上“没有用户端点数据,只有示例网站的布局”的砖墙。

回答这个问题可能为时已晚,但对于仍然在这方面遇到困难的人,请尝试一下这个---

您还可以在客户端应用程序上获得索赔清单,如-

var claims = HttpContext.User.Claims.ToList();

没有调用端点。

好的,我今天也遇到了同样的问题。在我的情况下,我得到的访问令牌是错误的。我使用HttpContext.Authentication.GetAuthenticateInfoAsync(“oidc”)执行得到了一个有效的令牌。好的,我有版本控制,所以我知道我实际上什么都没有更改,但现在它工作了。我将流程从HybridWithClientCredentials更改为HybridWithClientCredentials,但即使将其返回到HybridWithClientCredentials,GetStringAsync仍能正常工作。与此同时,UserInfoClient仍然存在这个bug。我很困惑。。。
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");

var client = new HttpClient();

client.SetBearerToken(accessToken);

var userInfoClient = new UserInfoClient("http://localhost:5000/connect/userinfo");

var response = await userInfoClient.GetAsync(accessToken);
var claims = response.Claims;
var claims = HttpContext.User.Claims.ToList();