gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:02:57 25 4
gpt4 key购买 nike

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

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

在 IdentityServer4 中,甚至还有一个设置

GetClaimsFromUserInfoEndpoint

文档建议我们设置为 true。

因此,我正在遵循 IdentityServer4 启动指南,并且一切正常,直到某一点为止。 This Quickstart包含提供的示例代码,尽管我假设我遗漏了一些明显的内容并且不需要查看代码。

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

所以我在我的客户端应用程序上编写了以下代码:
    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);
}

在这里,我知道 GetTokenAsync("access_token") 应该可以正常工作,因为它在示例项目的其他地方由连接到 API 的客户端应用程序使用。但是,我得到的响应再次是 IdentityServer 的布局页面和登录提示。

知道我的错误是什么以及如何访问 UserInfo 端点吗?

编辑:删除线程阻塞,这样我就不会向陌生人展示可耻的测试代码

好的,原来这段代码应该有一个简化版本,即:
        UserInfoClient uic = new UserInfoClient("http://localhost:5000", idToken);
var result = await uic.GetAsync();


return Content(JsonConvert.SerializeObject(result.Claims));

然而,问题仍然存在,甚至 UserInfoClient 中封装的代码也遇到了“没有用户端点数据,只有示例网站的布局”的砖墙。

最佳答案

现在回答可能有点晚了,但是对于仍然遇到此问题的任何人,请尝试这个 ---

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();

无需调用端点。

关于asp.net-core - 无法从客户端访问 IdentityServer4 文档示例中的 UserInfo 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41594261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com