ASP.NET Identity 多应用程序使用

9

我们的组织正在使用asp.net mvc和web api开发一些新的Web应用程序。我们决定不使用活动目录进行认证/授权,因此看起来asp.net identity与实体框架可能有效。

查看数据库模式,我没有看到应用程序表,因此我们可以拥有一个中央存储库,用于用户凭据和应用程序访问。这是claims发挥作用的地方吗?它会是什么样子;用户->应用程序->角色->权限

此外,我们的一个目标也是为用户提供单点登录。新的Bearer Tokens是否可行?

感谢您提供的任何帮助


你的角色是固定的还是动态的?比如说,最终用户可以在运行时更改角色,或者每个角色在开发阶段都有固定的权限。 - Shoaib Shakeel
3个回答

7
请看这个教程。它展示了如何使用Web API实现ASP.NET身份认证:http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/ 对于处理多个应用程序,有两种方法:
1.在所有用户名后添加AppId。 2.将AppId列添加到AspNetUsers表中,从UserStore派生并重新实现基于Find的方法,使查询考虑到AppId。
对于第一种方法,当应用程序想要创建新用户时,它会向WebApi发送包含新用户信息和AppId的请求。然后,WebApi将连接UserName和AppId以创建完整的用户名,该用户名将写入数据库。因此,如果应用程序1234想要创建一个名为myuser的用户,则WebApi将创建一个具有用户名myuser_1234的新用户。此后,在查询数据库之前,您必须首先从请求中获取UserName和AppId,将它们连接起来,然后再查询数据库。
如果另一个应用程序9900想要创建myuser,则写入数据库的最终用户名将是myuser_9900。
您可能需要在数据库中存储应用程序详细信息,并在每个请求中验证AppId,以确保在处理其请求之前识别该应用程序。
我没有想过第二步,所以这只是一个建议。
如果您想在多个应用程序之间共享用户凭据,则可以忽略上述内容,使用标准功能,并让所有应用程序指向同一个数据库,从而允许所有应用程序访问所有用户,无论哪个应用程序创建了哪个用户。
更新#1:在这种情况下,可以使用令牌,我认为(根据记忆)上面提到的教程系列涉及如何使单个WebApi为多个应用程序提供令牌。

我正在尝试在两个不同的子域上跨两个不同的应用程序共享凭据,因此它们运行在两个不同的应用程序池中,并且没有办法使用在另一个Web应用程序上创建的凭据进行登录。似乎在两个应用程序上哈希密码的方式不同,因此验证失败。 - Giox

2
您的用户和其凭据存储在AspNetUser表中,角色存储在ASPNetRole表中,而AspNetUserRole作为这两者之间的连接表,用于映射用户和角色。您可以通过在应用程序中共享这些表来实现SSO(单点登录)。每个应用程序都需要读取这些表和角色并登录用户。但更好的方法是创建一个中央WebApi来处理用户身份验证和授权。
此外,如果您的角色可以在运行时更改,则需要了解权限。您可以创建一个自定义表来存储权限,然后将角色映射到权限上。当用户登录时,只需加载所有权限并将其存储为声明。您可以将整个角色(带其权限列表)序列化并将其存储为一个声明,或者将每个权限作为单独的声明存储,以适合您最好的方式。

-2

会话状态与身份验证毫无关系。 - Erik Funkenbusch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接