如何保护 Web api 以验证客户端应用程序生成的 openid 令牌?
Posted
技术标签:
【中文标题】如何保护 Web api 以验证客户端应用程序生成的 openid 令牌?【英文标题】:How to secure web api to validate openid token generated by Client application? 【发布时间】:2021-10-28 06:06:17 【问题描述】:Client app的startup.cs文件中的OpenId Connect配置:
services.AddAuthentication(options =>
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
)
.AddCookie()
.AddOpenIdConnect(options =>
options.ClientId = azureAdConfig.ClientId;
options.ClientSecret = azureAdConfig.ClientSecret;
options.Authority = string.Format(com/, azureAdConfig.Tenant);
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.Resource = azureAdConfig.ResourceURI_Graph;
options.Events = new AuthEvents(azureAdConfig, connectionStringsConfig);
);
我想将令牌传递给 web api。
但是如何保护 web api 并在 api 项目中验证令牌?
【问题讨论】:
【参考方案1】:我同意大多数文档似乎都专注于网络应用场景。假设您在那里也使用 .Net Core,对于 API,这是使用此包的功能的情况:
Microsoft.AspNetCore.Authentication.JwtBearerservices
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
)
有关工作示例,请参阅下面的资源 - 可以使用任何授权服务器以相同的方式编写代码:
Code DocAZURE 广告令牌
这些有一些特定的要求。在自定义 API 中要避免的事情是在 JWT 标头中包含 nonce 字段的 JWT,因为它们仅供 Microsoft 自己的 API 使用
我的blog post 提供了一些关于如何解决此问题的详细信息,方法是注册一个逻辑 API 服务来表示一个或多个 API,然后公开您自己的 API 范围。
【讨论】:
感谢您的回答。是否必须在 Azure AD 中创建服务主体才能获得管理员同意才能获得 API 资源的有效令牌? 在我的回答中添加了一些关于 Azure AD 令牌的信息以上是关于如何保护 Web api 以验证客户端应用程序生成的 openid 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
无法验证从 Azure AD 获得的访问令牌签名以保护 Web API
如何保护 JSF 应用程序客户端和服务器端 REST API 模块
如何使用基本身份验证保护 android/ios 应用程序的 Web API