1

我们需要为我们构建的多个应用程序创建一个中央auth服务器,同时仍然具有特定于该特定应用程序的角色和声明。让我用微软的各种服务进行类比解释。客户端特定的声明身份server4使用asp.net核心身份

我注册了一个Microsoft帐户,因此我的身份验证信息存储在中央服务器中。现在我登录使用帐户,并假设我登陆在account.microsoft.com,现在我去msdn点击登录,它将我带到auth服务器上的登录页面,然后到同意屏幕并返回到msdn登录,现在我去到Xbox并做同样的事情。现在MDSN和XBOX是两个完全不同的应用程序,每个应用程序都有自己的Api,Web应用程序和移动应用程序,但使用相同的auth服务器。到目前为止,我一直在使用Identity Framework制作独立的应用程序,并且对此非常满意,但这比迄今为止我所做的要复杂得多。我正在浏览IdentityServer4以获得一个中央认证服务器,并且已经完成了官方doc站点上的所有教程,所以我对这些概念有一个基本概念。

我需要的是让每个应用程序都能够指定它自己的一组角色和声明,甚至没有任何有关其他应用程序的知识,并且中央服务器也将启用外部身份验证,因此ASP.NET核心身份在中央服务器。

当前的架构

  1. 中央身份服务器(使用IdentityServer4,ASP.NET核心身份,实体框架)
  2. 一个中央数据库的中央服务器
  3. 多个应用程序集(API,MVC应用程序,Xamarin移动应用)
  4. 一个或多个数据库的每个应用程序按照需要

的事情,我很能够实现至今

  1. 自定义身份资源来获得存储在数据库用户的权利要求,但如果我增加一个角色,它多次返回我的角色的次数为API资源和客户
的计数

,我在我的脑海里想出了

  1. 存放在专用的DB权利要求和角色,但我想我将要面对这些问题
      01备选方案
    • 接线认证逻辑过于费力,因为它必须先从中央服务器获取身份,然后从应用程序特定数据库获取声明
    • 不知道如何使用asp来完成此任务。在客户端网络身份
    • 中央auth服务器上未使用的表
    • 跨应用

这些堆栈溢出问题AUTH逻辑重复获得最多的最接近但不是精确解

把我带向正确的方向任何指导将帮助

编辑#1:好像有人检举这个问题作为题外话,所以只是想澄清,我期待对于使用身份服务器4和asp.net核心身份的特定代码/解决方案,并没有提供一些建议,尽管除了答案之外的任何指导都可以得到更好的说明和理解,但只是代码就足够了,我觉得它是按照社区的指导方针。

编辑#2 我试图做的客户端授权由@ travis.js的建议,但我无法理解如何实现对客户端类似[授权(角色=“管理员”)

索赔
+0

您需要指定到目前为止所尝试的内容以及您在代码中遇到的问题?欲了解更多信息,你可以随时参考Idsrv4文档 – Rohit

+0

@Rohit我已经写了我能够实现的东西,直到现在即自定义身份资源获取用户声明存储在分贝,但如果我添加一个角色,我面临的问题它会多次返回我角色的次数,因为API资源和客户端的计数以及我需要的每个应用程序都能够指定它自己的一组角色和声明,甚至没有任何有关其他应用程序的知识也是我已经写了我已经完成了官方文档的所有教程,并阅读了他们的github代码文件的所有文档 –

+0

您是否根据客户端定义了范围?您正在使用什么类型的身份验证模式? – Rohit

回答

1

我认为你的替代解决方案是“正确的”。

解决您的顾虑:

太多精力布线了权威性的逻辑,因为它必须先获得 从中央服务器的身份,然后得到的 应用特定要求DB

听起来像是对我来说正确的努力量。中央服务器进行身份验证,每个应用程序都有自己的授权。

不知道我怎么可以在客户端

使用asp.net身份去做你并不真的需要客户端/应用程序方面ASP.NET身份。身份由中央服务器处理。中央auth服务器

非问题上

未使用的表。但是,您仍然可以在更宏观的层面上使用该表来达到其预期目的。跨应用程序

复制AUTH逻辑的这并不听起来像逻辑的重复。中央服务器执行身份验证和身份验证,每个应用程序负责确定其自己的授权逻辑。

+0

我试图按照建议在客户端进行授权,但我无法理解如何在客户端实现类似[Authorize(Roles =“Admin”)]的声明 –

+0

您需要将“roles”声明包含在你的IdentityClaims列表/表格 –

+0

你能指导我如何,因为如果我在数据库中为身份服务器项目提出索赔时遇到问题,这对所有客户端来说都很常见,而且每个令牌都有所有客户端的声明,弄清楚如何为每个客户做到这一点 –

相关问题