使用 asp.net 核心身份的客户端特定声明身份服务器 4
client specific claims identity server4 using asp.net core identity
我们需要为我们构建的多个应用程序创建一个中央身份验证服务器,同时仍然具有特定于该特定应用程序的角色和声明。我用微软的各种服务打个比方说明一下。
我注册了 Microsoft 帐户,因此我的身份验证信息存储在中央服务器中。现在我使用该帐户登录并假设我在 account.microsoft.com 登陆并重新开始登录后,现在我转到 xbox 并做同样的事情。现在 MDSN 和 XBOX 是两个完全不同的应用程序,每个应用程序都有自己的 Api、Web 应用程序和移动应用程序,但使用相同的身份验证服务器。
到目前为止,我一直在使用 Identity Framework 制作独立应用程序,并且对它相当满意table,但这比我到目前为止所做的要复杂得多。我正在通过 IdentityServer4 寻找一个中央身份验证服务器,并且已经完成了官方文档站点上的所有教程,所以我对这些概念有了基本的了解。
我需要的是让每个应用程序能够指定它自己的一组角色和声明,甚至不需要任何关于其他应用程序的知识,而且中央服务器将启用外部身份验证,因此 ASP.NET 中央服务器中的核心标识。
当前架构
- 中央身份服务器(使用 IdentityServer4,ASP.NET 核心身份,Entity Framework)
- 中央服务器一个中央数据库
- 多个应用程序集(API、MVC 应用程序、Xamarin 移动应用程序)
- 根据需要为每个应用程序提供一个或多个数据库
到目前为止我能做到的事情
- 自定义身份资源以获取存储在数据库中的用户声明,但如果我添加一个角色,它 returns 我会重复角色的次数作为 API 资源和客户端的计数
我想到的替代解决方案
- 将声明和角色存储在特定于应用程序的数据库中,但我想我将面临这些问题
- 连接身份验证逻辑需要付出太多努力,因为它必须首先从中央服务器获取身份,然后从应用程序特定的数据库中获取声明
- 不确定如何在客户端使用 asp.net 身份
- 在中央授权服务器
上未使用table
- 跨应用程序的授权逻辑重复
这些堆栈溢出问题最接近但不是确切的解决方案
- ASP.NET 核心身份和身份服务器 4 - [角色、声明和
IdentityResources]
- IdentityServer, Claims and Roles
- How to add additional claims to be included in the access_token using ASP.Net Identity with IdentityServer4
任何指引我正确方向的指导都会有所帮助
编辑 #1:似乎有人将此问题标记为题外话,所以只想澄清一下我正在寻找特定的 code/solution 使用身份服务器 4 和 asp.net 核心身份而不是一些建议,尽管除了答案之外的任何指导都欢迎更好地澄清和理解,但只有代码就足够了,我觉得它符合社区的指导方针。
编辑#2
我尝试按照@travis.js的建议在客户端进行授权,但我无法理解如何在客户端实现声明,例如 [Authorize(Roles="Admin")]
我认为您的替代解决方案是 "right" 一个。
解决您的顾虑:
too much effort wiring up the auth logic, as it will have to first get
the identity from central server and then get claims from the
application specific DB
听起来我付出的努力恰到好处。中央服务器进行身份验证,每个应用程序进行自己的授权。
not sure how i can do it using asp.net identity on client side
你并不真的需要 ASP.NET client/app 身份。身份由您的中央服务器处理。
unused table on central auth server
非问题。但是您仍然可以在更宏观的层面上将 table 用于预期目的。
duplication of auth logic across applications
这听起来不像是逻辑重复。中央服务器 identity/authentication 并且每个应用程序负责确定自己的授权逻辑。
我们需要为我们构建的多个应用程序创建一个中央身份验证服务器,同时仍然具有特定于该特定应用程序的角色和声明。我用微软的各种服务打个比方说明一下。
我注册了 Microsoft 帐户,因此我的身份验证信息存储在中央服务器中。现在我使用该帐户登录并假设我在 account.microsoft.com 登陆并重新开始登录后,现在我转到 xbox 并做同样的事情。现在 MDSN 和 XBOX 是两个完全不同的应用程序,每个应用程序都有自己的 Api、Web 应用程序和移动应用程序,但使用相同的身份验证服务器。
到目前为止,我一直在使用 Identity Framework 制作独立应用程序,并且对它相当满意table,但这比我到目前为止所做的要复杂得多。我正在通过 IdentityServer4 寻找一个中央身份验证服务器,并且已经完成了官方文档站点上的所有教程,所以我对这些概念有了基本的了解。
我需要的是让每个应用程序能够指定它自己的一组角色和声明,甚至不需要任何关于其他应用程序的知识,而且中央服务器将启用外部身份验证,因此 ASP.NET 中央服务器中的核心标识。
当前架构
- 中央身份服务器(使用 IdentityServer4,ASP.NET 核心身份,Entity Framework)
- 中央服务器一个中央数据库
- 多个应用程序集(API、MVC 应用程序、Xamarin 移动应用程序)
- 根据需要为每个应用程序提供一个或多个数据库
到目前为止我能做到的事情
- 自定义身份资源以获取存储在数据库中的用户声明,但如果我添加一个角色,它 returns 我会重复角色的次数作为 API 资源和客户端的计数
我想到的替代解决方案
- 将声明和角色存储在特定于应用程序的数据库中,但我想我将面临这些问题
- 连接身份验证逻辑需要付出太多努力,因为它必须首先从中央服务器获取身份,然后从应用程序特定的数据库中获取声明
- 不确定如何在客户端使用 asp.net 身份
- 在中央授权服务器 上未使用table
- 跨应用程序的授权逻辑重复
这些堆栈溢出问题最接近但不是确切的解决方案
- ASP.NET 核心身份和身份服务器 4 - [角色、声明和 IdentityResources]
- IdentityServer, Claims and Roles
- How to add additional claims to be included in the access_token using ASP.Net Identity with IdentityServer4
任何指引我正确方向的指导都会有所帮助
编辑 #1:似乎有人将此问题标记为题外话,所以只想澄清一下我正在寻找特定的 code/solution 使用身份服务器 4 和 asp.net 核心身份而不是一些建议,尽管除了答案之外的任何指导都欢迎更好地澄清和理解,但只有代码就足够了,我觉得它符合社区的指导方针。
编辑#2 我尝试按照@travis.js的建议在客户端进行授权,但我无法理解如何在客户端实现声明,例如 [Authorize(Roles="Admin")]
我认为您的替代解决方案是 "right" 一个。
解决您的顾虑:
too much effort wiring up the auth logic, as it will have to first get the identity from central server and then get claims from the application specific DB
听起来我付出的努力恰到好处。中央服务器进行身份验证,每个应用程序进行自己的授权。
not sure how i can do it using asp.net identity on client side
你并不真的需要 ASP.NET client/app 身份。身份由您的中央服务器处理。
unused table on central auth server
非问题。但是您仍然可以在更宏观的层面上将 table 用于预期目的。
duplication of auth logic across applications
这听起来不像是逻辑重复。中央服务器 identity/authentication 并且每个应用程序负责确定自己的授权逻辑。