Asp.net mvc 具有多个应用程序的ASP.NET标识
因此,我们的组织正在使用asp.net mvc和web api开发一些新的web应用程序。我们决定不使用active directory进行身份验证/授权,因此看起来asp.net identity with entity framework可能会起作用 查看数据库模式,我没有看到应用程序表,因此我们可以有一个用于用户凭据和应用程序访问的中央存储库。这就是索赔的来源吗?那会是什么样子;用户->应用->角色->权限 此外,我们的目标之一是为用户提供单点登录。使用新的持票人代币可以吗Asp.net mvc 具有多个应用程序的ASP.NET标识,asp.net-mvc,asp.net-web-api,single-sign-on,asp.net-identity,Asp.net Mvc,Asp.net Web Api,Single Sign On,Asp.net Identity,因此,我们的组织正在使用asp.net mvc和web api开发一些新的web应用程序。我们决定不使用active directory进行身份验证/授权,因此看起来asp.net identity with entity framework可能会起作用 查看数据库模式,我没有看到应用程序表,因此我们可以有一个用于用户凭据和应用程序访问的中央存储库。这就是索赔的来源吗?那会是什么样子;用户->应用->角色->权限 此外,我们的目标之一是为用户提供单点登录。使用新的持票人代币可以吗 感谢您为单点登
感谢您为单点登录提供的帮助,您可以共享cookie或使用不同的会话状态,如
或
您的用户及其凭据存储在
AspNetUser
表中,角色位于ASPNetRole
中,而AspNetUserRole
充当两者之间的连接表,以映射用户和角色。您可以通过在应用程序中共享这些表来实现SSO(单点登录)。每个应用程序都需要阅读这些表、角色和登录用户。但更好的方法是创建一个中央WebApi来处理用户身份验证和授权
另外,如果您可以在运行时更改角色,那么您就知道权限,您可以创建一个用于存储权限的自定义表,然后将角色映射到权限。当用户登录时,只需加载其所有权限并存储为声明。您可以序列化整个角色(及其权限列表)并将其存储为一个声明。或者将每个权限存储为单独的声明,以最适合您的为准。查看本教程。它显示了如何使用Web API实现ASP.NET标识: 至于处理多个应用程序。我想到的两种方法是:
AppId
AppId
列添加到AspNetUsers
表中,从UserStore
派生并重新实现基于Find
的方法,以便查询考虑AppId
AppId
的请求。然后WebApi将连接用户名
和AppId
,以创建将写入数据库的完整用户名。因此,如果应用程序1234
希望使用用户名myuser
创建一个用户,那么WebApi将使用用户名myuser\u 1234
创建一个新用户。从那时起,在查询数据库时,首先从请求中获取用户名
和AppId
,将它们连接起来,然后查询数据库
如果另一个应用程序9900
想要创建myuser
,那么写入数据库的最终用户名将是myuser\u 9900
您可能希望将应用程序详细信息存储在数据库中,并对每个请求验证AppId
,以确保在处理其请求之前识别应用程序
我对第二步考虑得不多,所以这只是一个建议
如果您希望在多个应用程序之间共享用户凭据,那么您可能可以忽略上述内容,使用标准功能,让所有应用程序指向同一个数据库,从而允许所有应用程序访问所有用户,而不管哪个应用程序创建了哪个用户
更新#1:在这种情况下,可以使用承载令牌,我认为(从内存中)上面提到的教程系列涉及到这一点,以及单个WebApi如何为多个应用程序提供令牌。会话状态与身份验证无关。您的角色是固定的还是动态的。例如,最终用户可以在运行时更改角色,或者每个角色在开发阶段都有固定的权限。我正在尝试在两个不同子域上的两个不同应用程序之间共享凭据,因此它们在两个不同的应用程序池上运行,并且无法使用在另一个web应用程序上创建的凭据登录。似乎密码在两个应用程序上的散列方式不同,因此验证失败。