Asp.net core 使用MVC客户端处理大型标识的推荐方法是什么?

Asp.net core 使用MVC客户端处理大型标识的推荐方法是什么?,asp.net-core,identityserver4,Asp.net Core,Identityserver4,我使用IdentityServer4进行身份验证,但其中一个客户端应用程序是一个没有API访问的简单MVC站点。我最初将GetClaimsFromUserInfoEndpoint设置为true,这样我们就可以在请求中简单地使用id令牌。一切正常,但由于与我们的用户相关的大量角色声明,id令牌膨胀,身份验证cookie被分块,我们在旧浏览器中遇到了一些问题。所以,我已经将GetClaimsFromUserIndoEndpoint设置为false,并寻找另一种方法来获取我们需要的声明 我已经编写了一

我使用IdentityServer4进行身份验证,但其中一个客户端应用程序是一个没有API访问的简单MVC站点。我最初将GetClaimsFromUserInfoEndpoint设置为true,这样我们就可以在请求中简单地使用id令牌。一切正常,但由于与我们的用户相关的大量角色声明,id令牌膨胀,身份验证cookie被分块,我们在旧浏览器中遇到了一些问题。所以,我已经将GetClaimsFromUserIndoEndpoint设置为false,并寻找另一种方法来获取我们需要的声明

我已经编写了一个定制的owin中间件,它查询用户信息端点,在请求开始时添加声明,并带有基本缓存,但它似乎比它应该做的要慢一些。MVC站点设置为使用混合模式,在请求开始时,使用访问令牌命中UserInfo端点,缓存该信息,并将其附加到ClaimsPrincipal

这实现了我的目标,但似乎滥用了访问令牌,我担心这可能会给我们带来未来的问题,因为它需要访问和刷新令牌管理

是否有更好的推荐模式来保持id令牌纤细,同时在进行授权检查之前根据请求为其补水


非常感谢您的建议。

请查看IdentityServer创建者提供的。事实上,它使用了相同的中间件方法,但有不同的来源。这样做的目的是使令牌尽可能小,使用IdentityServer进行身份验证和客户机/资源授权,同时将用户授权外包给策略服务器。OSS版本只是简单地添加了角色、权限、声明,而商业版更进一步。这在某些情况下可能很有用,但在这种情况下,我们不希望此时将授权规则移到主MVC客户端应用程序之外。我们真的希望在减少令牌大小的同时保持正常的OpenIdConnect功能。但是,谢谢你的建议:)@Daniel,老实说,将用户权限放入令牌不是OIdC的正常功能。这是微软在其身份实现中发明的,最近几年,他们建议忘记这一点,改用自定义策略。我看不出在一个应用程序中保留权限有任何问题,但您可以使用API来获取权限,而不是令牌。顺便说一句,
UserInfoEndpoint
也是一个API,但它不是专门用于访问控制的。请查看IdentityServer创建者提供的。事实上,它使用了相同的中间件方法,但有不同的来源。这样做的目的是使令牌尽可能小,使用IdentityServer进行身份验证和客户机/资源授权,同时将用户授权外包给策略服务器。OSS版本只是简单地添加了角色、权限、声明,而商业版更进一步。这在某些情况下可能很有用,但在这种情况下,我们不希望此时将授权规则移到主MVC客户端应用程序之外。我们真的希望在减少令牌大小的同时保持正常的OpenIdConnect功能。但是,谢谢你的建议:)@Daniel,老实说,将用户权限放入令牌不是OIdC的正常功能。这是微软在其身份实现中发明的,最近几年,他们建议忘记这一点,改用自定义策略。我看不出在一个应用程序中保留权限有任何问题,但您可以使用API来获取权限,而不是令牌。顺便说一下,
UserInfoEndpoint
也是一个API,但它不是专门用于访问控制的。