我正在将IdentityServer4与v4 / v3客户端混合使用。
我有一些自定义配置文件数据,这些数据存储在应用程序端,我希望将其包含在access_token中,以便我的下游API可以将其用于承载/ jwt身份验证。
我了解我可以通过IProfileService处理声明,但这是在身份方面而非应用程序上注册的。
如何将我的自定义配置文件声明放入请求的访问令牌中?
其他详细信息
我已经使用Extension Grants进行了概念验证,以专门通过IdS传递我的应用程序声明,以使其包含在令牌中。它可以工作...但是感觉很hacky。
答案 0 :(得分:1)
请不要这样做。 JWT令牌随每个请求一起发送。
如果下游API需要用户提供某些信息,则可以通过调用提交它,或者让下游API可以调用Endpoing。将很少使用的大信息嵌入到每次呼叫传输的内容中(http 2.0除外)是非onononono。
答案 1 :(得分:0)
由授权服务器创建并签名后,您将无法更改jwt令牌内容。但是您可以使用ClaimsTransformation
来操纵有关api项目的声明。
编辑:使用JwtBearer OnTokenValidated
事件的另一种选择。
答案 2 :(得分:0)
从您的IProfileService实现发出的任何声明都应以令牌结尾。 请注意,您的IProfileService实现应检查它是否发出与IdentityResources或ApiResources相关的声明。将api声明添加到id_token会毫无意义。
当客户端从您的IDS收到令牌时,它将在调用中将其传递给您的API。 如果您的客户端使用cookie身份验证,则令牌本身以及一些用户配置文件声明将存储在身份验证cookie中。显然,这取决于您使用隐式,混合等的流量。
如果您要检查从客户端IDS获得的内容,则可以添加Cookie身份验证事件处理程序(例如OnValidatePrincipal)以查看Cookie中存储的内容,或者向您的OIDC处理程序添加OnUserInformationReceived事件处理程序并检查你回到那里什么。