所以我们的组织正在使用asp.net mvc和web api开发一些新的web应用程序 . 我们决定不使用活动目录进行身份验证/授权,因此看起来像实体框架的asp.net身份可能会起作用 .
查看数据库模式我没有看到应用程序表,因此我们可以拥有一个用于用户凭据和应用程序访问的中央存储库 . 这是声称进来的地方吗?那怎么样;用户 - >应用程序 - >角色 - >权限
另外,我们的目标之一是为用户提供单点登录 . 这是否可能与新的持票人令牌?
感谢您的任何帮助,您可以提供
看一下本教程 . 它显示了如何使用Web API实现ASP.NET标识:
http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/
至于处理多个应用程序 . 我想到的两种方法是:
将 AppId 附加到所有用户名
AppId
将 AppId 列添加到 AspNetUsers 表,派生自 UserStore 并重新实现基于 Find 的方法,以便查询考虑到 AppId
AspNetUsers
UserStore
Find
对于#1,当应用程序想要创建新用户时,它将向WebApi发送包含新用户信息和 AppId 的请求 . 然后,WebApi将连接 UserName 和 AppId 以创建将写入数据库的完整用户名 . 因此,如果应用程序 1234 想要创建用户名为 myuser 的用户,则WebApi将创建一个名为 myuser_1234 的新用户 . 从查询数据库时,您首先从请求中获取 UserName 和 AppId ,连接它们然后查询数据库 .
UserName
1234
myuser
myuser_1234
如果另一个应用程序 9900 想要创建 myuser ,那么写入数据库的最终用户名将是 myuser_9900 .
9900
myuser_9900
您可能希望将应用程序详细信息存储在数据库中,并且每个请求都会验证 AppId ,以确保在处理其请求之前识别该应用程序 .
我没有多想第2步,所以它只是一个建议 .
如果您想在多个应用程序之间共享用户凭据,那么您可能会忽略上述内容,使用标准功能并让所有应用程序指向同一个数据库,从而允许所有应用程序访问所有用户,而不管哪个应用程序创建了哪个用户 .
更新#1:在这种情况下,可以使用持有者令牌,我认为(从内存开始)上面提到的教程系列涉及到这一点以及单个WebApi如何为多个应用程序提供令牌 .
您的用户及其凭据存储在 AspNetUser 表中,角色位于 ASPNetRole 中,而 AspNetUserRole 用作两者之间的联结表以映射用户和角色 . 您可以通过在应用程序中共享这些表来实现SSO(单点登录) . 像每个应用程序都需要读取这些表和角色以及登录用户 . 但更好的方法是创建一个中央WebApi来处理用户身份验证和授权 .
AspNetUser
ASPNetRole
AspNetUserRole
此外,如果您可以在运行时更改角色,那么您已了解权限,您可以创建用于存储权限的自定义表,然后将角色映射到权限 . 当用户登录时,只需加载他的所有权限并存储为声明 . 您可以序列化整个角色(及其权限列表)并将其存储为一个声明 . 或者将每个权限存储为个人索赔,以最适合您的方式 .
对于单点登录,可以共享cookie或使用不同的会话状态,例如 <sessionState mode="SQLServer"> 或 <sessionState mode="StateServer"> https://msdn.microsoft.com/en-us/library/ms178586(v=vs.140).aspx
<sessionState mode="SQLServer">
<sessionState mode="StateServer">
3 回答
看一下本教程 . 它显示了如何使用Web API实现ASP.NET标识:
http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/
至于处理多个应用程序 . 我想到的两种方法是:
将
AppId
附加到所有用户名将
AppId
列添加到AspNetUsers
表,派生自UserStore
并重新实现基于Find
的方法,以便查询考虑到AppId
对于#1,当应用程序想要创建新用户时,它将向WebApi发送包含新用户信息和
AppId
的请求 . 然后,WebApi将连接UserName
和AppId
以创建将写入数据库的完整用户名 . 因此,如果应用程序1234
想要创建用户名为myuser
的用户,则WebApi将创建一个名为myuser_1234
的新用户 . 从查询数据库时,您首先从请求中获取UserName
和AppId
,连接它们然后查询数据库 .如果另一个应用程序
9900
想要创建myuser
,那么写入数据库的最终用户名将是myuser_9900
.您可能希望将应用程序详细信息存储在数据库中,并且每个请求都会验证
AppId
,以确保在处理其请求之前识别该应用程序 .我没有多想第2步,所以它只是一个建议 .
如果您想在多个应用程序之间共享用户凭据,那么您可能会忽略上述内容,使用标准功能并让所有应用程序指向同一个数据库,从而允许所有应用程序访问所有用户,而不管哪个应用程序创建了哪个用户 .
更新#1:在这种情况下,可以使用持有者令牌,我认为(从内存开始)上面提到的教程系列涉及到这一点以及单个WebApi如何为多个应用程序提供令牌 .
您的用户及其凭据存储在
AspNetUser
表中,角色位于ASPNetRole
中,而AspNetUserRole
用作两者之间的联结表以映射用户和角色 . 您可以通过在应用程序中共享这些表来实现SSO(单点登录) . 像每个应用程序都需要读取这些表和角色以及登录用户 . 但更好的方法是创建一个中央WebApi来处理用户身份验证和授权 .此外,如果您可以在运行时更改角色,那么您已了解权限,您可以创建用于存储权限的自定义表,然后将角色映射到权限 . 当用户登录时,只需加载他的所有权限并存储为声明 . 您可以序列化整个角色(及其权限列表)并将其存储为一个声明 . 或者将每个权限存储为个人索赔,以最适合您的方式 .
对于单点登录,可以共享cookie或使用不同的会话状态,例如
<sessionState mode="SQLServer">
或<sessionState mode="StateServer">
https://msdn.microsoft.com/en-us/library/ms178586(v=vs.140).aspx