讲师中心 微信公众号
AI工具推荐 视频效率加速

C# OpenIddict作用域和声明方法 C#如何配置API资源和身份资源

酷辰小哥_6644

酷辰小哥_6644

发布时间:2026-02-19 09:45:27

|

515人浏览过

|

来源于php中文网

原创

scope是客户端声明的访问权限范围,claims是用户身份携带的属性数据;OpenIddict不自动映射scope为claims,需手动注入,且scope控制“能访问什么”,claims控制“是谁、有什么属性”。

c# openiddict作用域和声明方法 c#如何配置api资源和身份资源

OpenIddict 里 scope 和 claims 的区别在哪

scope 是客户端请求访问权限时声明的“能力范围”,比如 api.read 或 profile;claims 是用户身份中实际携带的“属性数据”,比如 name、email、role。OpenIddict 不自动把 scope 映射成 claims,也不自动发放 claims —— 它只按你配置的 scope 列表决定是否签发 token,而 claims 必须显式添加到 ClaimsPrincipal 或通过 IAuthorizationService 注入。

常见错误是以为只要在 client 配置了 scopes = ["profile"],token 就会自动包含 name 和 email。不会。必须手动在登录逻辑里把用户信息加进 ClaimsIdentity,或用 AddClaims 扩展方法补全。

  • scope 控制“能访问什么”,用于授权决策(如 [Authorize(Policy = "ApiRead")])
  • claims 控制“是谁、有什么属性”,用于业务逻辑(如 User.FindFirst("role")?.Value)
  • OpenIddict 默认只注入 sub、iat、exp 等基础 claims,其余全靠你填

如何注册 API 资源(Resource Server)

API 资源不是 OpenIddict 自动识别的,而是靠 AddApiScopes + AddApiResources 显式定义,并在 API 项目中用 AddAuthentication().AddJwtBearer() 验证 token 中的 aud 和 scope。

关键点:API 项目和授权服务器可以分离,但 scope 名称必须完全一致(大小写敏感),且 API 的 audience 必须匹配授权服务器注册的 ApiResources 名称。

  • 在授权服务器调用 services.AddOpenIddict().AddServer().AddApiScopes("api.read", "api.write")
  • 再调用 AddApiResources("my_api", "My API"),其中 "my_api" 将成为 JWT 的 aud 值
  • 在 API 项目中,JwtBearerOptions.Audience 必须设为 "my_api",否则验证失败
  • scope 检查需配合策略:如 options.AddPolicy("ApiRead", p => p.RequireClaim("scope", "api.read"))

怎么配置 identity resources(如 profile、email)

identity resources 是 OIDC 标准中预定义的用户属性集合,OpenIddict 本身不内置实现,但允许你用 AddIdentityResources 注册名称,并在 token endpoint 返回时手动注入对应 claims。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载

例如注册 profile 后,客户端带 scope=profile 请求 token,OpenIddict 不会自动返回 name 或 picture —— 你需要监听 ProcessSignInContext 事件,在签发前把用户数据塞进去。

  • 注册:options.AddIdentityResources("profile", "email", "address")
  • 监听事件:options.AddEventHandler<openiddictserverevents.processsignincontext>(...)</openiddictserverevents.processsignincontext>
  • 在 handler 中判断 context.Request.GetScopes().Contains("profile"),再调用 context.Principal.AddIdentityTokenClaim(...)
  • 注意:这些 claims 只出现在 ID Token(登录响应)中,不出现在 Access Token,除非你额外往 access token 加

为什么 /connect/token 返回的 access_token 没有 scope 字段

OpenIddict 默认不把 scope 写进 access_token payload,它只在 token 的 scope 响应参数里返回(HTTP body 中),这是 OAuth 2.0 规范行为。access_token 是 opaque 或 JWT,JWT 版本默认也不含 scope claim —— 因为 scope 是授权上下文信息,不是资源访问所需的凭证内容。

如果你需要在 API 中读取 scope,有两种方式:

  • 解析 JWT 并检查 scope claim(需手动添加,OpenIddict 不自动加):在 ProcessSignInContext 中调用 context.Principal.AddAccessTokenClaim("scope", string.Join(" ", context.Request.GetScopes()))
  • 更推荐的方式:用 policy + RequireScope("api.read"),它底层从 context.User.FindAll("scope") 读取,无需改 token 结构
  • 切勿依赖 access_token 中是否存在 scope 字段做鉴权,应统一走 IAuthorizationService 或策略机制

最易被忽略的是:scope 名称拼写不一致、大小写错位、API 未正确设置 audience、以及忘记在 ProcessSignInContext 中手动注入 identity claims —— 这些都会导致看似配置完整,实则 token 为空或鉴权失败。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7259

2023.08.02

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.12.20

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

15086

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1765

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

4217

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

6381

2024.03.01

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3943

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

974

2023.11.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn