在客户端应用程序中配置用户授权

问题描述 投票:6回答:1

背景说明

谈到Identity Server 4,当我考虑客户端应用程序中的用户管理设计时,我遇到了障碍。

此时,我使用ASP身份用户帐户作为其用户存储设置Identity Server。

我已经构建了用于将用户添加到Identity Server用户存储的UI。

我已经测试过设置一个MVC应用程序的客户端,我正处于可以成功通过Identity Server进行身份验证并在我的客户端应用程序中接收openid身份令牌的位置。

Identity Server为我的客户端应用程序提供身份验证。

现在,我需要专注于我的应用程序内的授权。这就是我遇到困难的地方,我需要在应用程序本地创建用户,其中存储了应用程序中的用户权限。

我需要将Identity Server中的用户链接/关联到客户端应用程序中的用户。

一种方法是将sub存储在身份令牌中作为客户端应用程序数据库中的用户声明(Asp Identity)。这样,当用户进行身份验证时,我可以根据令牌中的sub在本地数据库中找到它们。

sub必须是身份服务器用户存储中用户的唯一ID。这样,如果用户的电子邮件被更改,我们仍然可以链接两个用户帐户。

客户端应用程序中的用户帐户不需要密码或电子邮件地址,它将纯粹是用于整个应用程序授权的声明和角色,以及任何其他特定于应用程序的信息。

在客户端应用程序中创建用户时,必须存在Identity Server和客户端应用程序之间的通信?

  • 我们需要关联这两个帐户吗?
  • 我们需要确保正在创建的客户端用户帐户还具有要成功通过身份验证的Identity Server用户帐户吗?

在这个过程中,这些任务应该完成吗?我正在寻找两个应用程序之间的通信流程的一些指导?

编辑

客户端应用程序中根本没有用户帐户是否可行?

这意味着用户的所有用户声明都存储在Identity Server的用户存储中。

当客户端使用IDP进行身份验证时,它仅请求特定于客户端应用程序的用户声明。

用户存储中的示例用户声明: -

  1. “clientA_role”:“管理员”
  2. “clientB_role”:“用户”

当客户端应用程序A进行身份验证时,它仅请求范围clientA_role

这感觉很糟糕!

有什么建议?

asp.net-mvc openid openid-connect identityserver4
1个回答
1
投票

如果您有许多客户端应用程序,那么我建议用户管理的方式是:

用户管理服务:

为用户管理创建单独的服务,身份服务器将用作用户存储,并且当需要用户元数据时,应用程序将用作用户存储库。

你也为什么要这样做:

用户存储中的示例用户声明: -

“clientA_role”:“管理员”

“clientB_role”:“用户”

为什么不只是“角色”:“用户”?在您的应用程序中,您将使用授权[角色]注释保护您的资源。

不要为不同的应用程序创建不同的字段,将其视为一般用户管理服务,我很确定标准化您的身份管理将使其更容易,并将获得您的可维护性和灵活性。

IdentityServer服务处理身份管理:

如果您认为您的应用程序没有如此深入的用户管理需求,那么将用户存储保留在提供授权的同一服务中可能是个好主意。

在这种情况下,再次存储标准声明并在id_token或access-token中返回您需要的声明。

更新:

对于在不同应用程序中具有不同角色的特定用户:

让我们说我们有以下几点:

1- User1在第一个app中具有用户角色,在第二个app中具有admin角色

User1.Roles{"FirstAppUser","SecondAppAdmin"}

2- User2在两个应用中都有管理员角色,然后:

User2.Roles{"FirstAppAdmin","SecondAppAdmin"}
© www.soinside.com 2019 - 2024. All rights reserved.