【发布时间】:2017-06-30 02:01:45
【问题描述】:
我已经创建了一个 Web API 应用程序、一个 MVC 应用程序和一个移动应用程序。
Web API 应尽可能与其他两个应用程序分离。我在这里使用密码授予流程:使用 Web API 的客户端需要使用用户名和密码向/Token 发送 POST。然后,返回的访问令牌将用于使用标准 Authorization: Bearer <access_token> 对 API 的进一步调用。
MVC 应用程序仅可供少数几个用户访问,它有自己的数据库,其中包含这些用户的信息和角色。 MVC 应用程序的某些部分应仅限于一个或两个用户(例如),而其他部分应可供所有注册用户访问。这可以通过在 MVC 应用程序中的特定控制器上使用 Authorize 属性来完成 - 一切都很好。此外,MVC 应用程序应该能够与 Web API 交互。
其次,我想要一个能够与 Web API 交互的移动应用程序。这里的一个关键点是我不会要求用户在应用程序中注册。所以本质上,(它现在在我的脑海里是怎样的)API 唯一会看到的是“这个令牌属于“AndroidApp”用户并且有密码 X - 当然,你是我认识的,我'将授予您访问权限”。这在我看来有点“不安全”,这意味着移动应用程序的所有用户都将共享相同的身份验证凭据。
问题:
- 用户 A 是允许访问 MVC 应用程序的用户之一 - 我希望 MVC 应用程序和 Web API 都能识别他。有没有一种简单的方法可以在两个数据库之间同步数据,或者我应该在两个数据库中注册他(一个用于 MVC,一个用于 API)?可能还有一个更好的第三个选项我没有想过。
- 用户 B 是移动应用程序的用户,他应该不能够访问 MVC 应用程序。如何确保这一点?显然,MVC 用户数据库不会包含有关移动应用程序用户的任何信息。我只是想知道在应用程序中嵌入一对身份验证凭据的安全方面 - 对我来说听起来不太好。
我偶然发现了this 的问题,基本上和我的一样。但是,正如公认的答案所暗示的那样,我并不真正认为 Web 应用程序(在我的情况下为 MVC 应用程序)需要授权代码授予流程。
希望我的问题有意义,否则请告诉我:)
【问题讨论】:
-
也许 identityserver 适合你。看看这个:docs.identityserver.io/en/dev/index.html 文档是为 asp.net core 编写的,但你可以使用 idsrv3。
-
您需要了解角色的概念,而不仅仅是授权。您的应用程序将具有不同的客户端 ID。基于此,您可以在令牌中放置不同的声明。然后,该属性可以检查声明是否存在,以查看此令牌是属于移动应用还是 MVC 应用。
标签: c# asp.net-mvc rest authentication asp.net-web-api