![](/img/trans.png)
[英]Handling authentication/authorization: ASP.NET Core Web Application => ASP.NET Core Web API => SQL
[英]How to organize communication in an asp.net web application using separate authorization server, web api, ui?
ui
、 api
、 IdentityServer
( IS
) ( client
、 resource
、 IS
在IdentityServer
)IS
和api
单独数据库)api
是无状态的(所有需要的身份验证信息都来自令牌)api
将拥有\\projects
、 \\users
等资源。another-ui
,它将与IS
和api
通信并拥有自己的声明主要问题是api
的资源,如\\projects\\12345
、 \\users\\
、 \\projects\\123456\\users
等,也可能需要作为IS
。 例如, api
模块读取授权用户的访问令牌并查看等于["222", "12345"]
的声明projects
,因此该\\projects\\123456\\users
允许资源\\projects\\12345
或\\projects\\123456\\users
。 用户同时是IS
中的身份和api
中的资源。 项目同时是IS
中的声明和api
中的资源。
我想通过 ids (guids) 来记录这些在两个模块中表示的实体。 但是 id 并不能解决所有问题。
他们之中有一些是:
IS
api 为该用户创建该声明,然后继续创建项目。 应该如何组织两者( IS
和api
)之间的通信? 我们是否需要在IS
中将api
注册为另一个客户端?IS
中用户的更新应该如何更新,例如更改电子邮件、电话(可能登录的值)将更新api
。 我想显示身份验证电子邮件(从令牌中获得)与信息电子邮件不匹配的警告。请您解释一下现代系统如何与每个资源访问相结合?
感谢您的时间。
首先,您需要确定索赔是什么。
声明不是权限或角色,而是用户。 根据用户是什么,然后您可以承担权限。
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims?view=aspnetcore-3.0
声明是一个名称值对,表示主题是什么,而不是主题可以做什么。
因此,从那里开始,您可以获得声明并执行以下操作。
假设用户是项目的所有者。 创建新项目时,项目 api 可以更新身份服务器并向用户添加声明,说明他是所有者。
在您的 api 中,项目的所有者拥有一组权限,并基于这些权限访问特定资源
在 DDD 领域驱动的设计世界中,一点点的数据重复并不重要。 因此,复制您的应用程序在角色方面需要的可能声明(同样,不是 id,而是一个或多个声明到特定角色的映射)并不是一个坏习惯。
当您从 api 更新某种声明时,您应该以事务性的方式进行。 首先考虑是否需要将电子邮件保存在两者中。 无论如何,您将在每个请求中从声明中获取用户数据。 它甚至是您需要的东西作为索赔吗? 如果没有它只在你的 api 中。
api 之间的通信以多种方式进行组织。 如果您需要事务或最终一致性,您还应该考虑。 与事件或队列通信是微服务的方式,像 SAGA 这样的模式是协调器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.