如何在 ASP.NET 核心 WEB API 控制器中获取 OpenID 信息

马克西姆

有两种应用:

  1. 启用 OpenID 连接的 OneLogin 身份提供程序。
  2. 我的 ASP.NET 核心 WEB API,它是前端应用程序的资源服务器。

最初我只实现了授权逻辑,使用以下代码:

serviceCollection
            .AddAuthentication(options =>
            {
                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.Audience = clientId;
                options.Authority = authority;
            });

我为我的控制器设置了 [AuthorizeAttribute] 并且授权逻辑工作正常。现在我需要在我的控制器中获取有关用户的信息。为此,我想使用 OpenID 信息。我通过添加 OpenID 连接修改了我的代码:

serviceCollection
            .AddAuthentication(options =>
            {
                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.Audience = clientId;
                options.Authority = authority;
            })
            .AddOpenIdConnect(options =>
            {
                options.ClientId = clientId;
                options.Authority = authority;
                options.GetClaimsFromUserInfoEndpoint = true;
            });

但我仍然只在我的控制器 (User.Identity) 中看到 access_token 声明。我错过了什么?

托内斯泰纽斯

你有两个选择。

您可以将所需的声明添加到访问令牌(在 ApiScope 或 ApiResources 中),然后通过 API 中的 AddJwtBearer 进行访问。

或者,您可以获取访问令牌并将其发送到令牌自省端点,从响应中您可以获得有关用户的更多详细信息。您还可以使用访问令牌手动调用 userinfo 端点。但是,AddJWtBearer 不会为您调用这些端点。IdentityModel 中的辅助类可以帮助您做到这一点。

将 AddOpenIdConnect 添加到 API 中,只是为了获取用户详细信息是错误的做法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET核心WEB API中验证Azure AD v2生成的OpenID Connect访问令牌?

从 ASP.Net 核心 Web API 中的后请求在基本控制器中分配值

Post方法在Asp.net核心Web API控制器中返回404

如何在Asp.net Web Api中的url参数中发送控制器动作?

如何在 ASP Net Core 中授权 Web API 控制器

如何在 Web API 控制器中读取 ASP.NET_SessionId?

如何使用 JavaScript 从 ASP.NET 核心 Web 应用程序获取 JSON 信息

如何在同一项目中的ASP.NET MVC控制器中从ASP.NET Web API获取数据

如何在asp.net核心Web Api中写入连接字符串?

如何在asp.net核心Web API中阅读发布的FormUrlEncodedContent?

需要在asp.net核心Web API控制器方法中添加Json序列化设置

如何将 ASP.NET MVC 核心视图和 ASP.NET WEB API 控制器分离到单独的项目中?

如何在Asp.Net(aspx)应用程序C#中添加API控制器(Web API 2)

ASP.NET Web API在控制器构造函数中获取用户身份

如何在asp.net核心控制器中绘制图片

忽略ASP.NET Web API中的控制器

将Web API动作和非api动作混合在同一控制器asp.net核心中

在ASP.Net Web API控制器中如何查找用户名?

如何在ASP.NET Core Web API中将新控制器设置为默认控制器

在具有ASP.net核心的基本控制器(API控制器)中处理异常

如何使autofac KeyFilter在asp.net核心Web API中工作?

如何在ASP.NET Web API核心中全局启用CORS

如何在我上传文件的Asp.Net核心Web API端点上进行集成测试?

ASP.Net Web API与.Net核心Web API

控制器中其他类的.net核心Web API访问变量

.net核心Web API Jwtbearer中间件如何使用身份验证提供程序验证OpenID Connect令牌

如何避免在 ASP.NET 核心控制器中重新加载资源

单元测试-控制器未从ASP.NET Core Web API项目中的模拟IConfiguration中获取值

C#ASP.NET Web Api控制器-使用SqlCommand从表中获取所有行