c# - 从 MVC 客户端应用程序和移动应用程序保护对 .NET Web API 的访问

标签 c# asp.net-mvc rest authentication asp.net-web-api

我已经创建了一个 Web API 应用程序、一个 MVC 应用程序和一个移动应用程序。

Web API 应尽可能与其他两个应用程序分离。我在这里使用密码授予流程:使用 Web API 的客户端需要发送一个 POST 到 /Token使用用户名和密码。然后使用标准 Authorization: Bearer <access_token> 将返回的访问 token 用于进一步调用 API .

MVC 应用程序仅可供少数用户访问,并且它有自己的数据库,其中包含这些用户的信息和角色。 MVC 应用程序的某些部分应该仅限于一个或两个用户(例如),而其他部分应该可供所有注册用户访问。这可以通过使用 Authorize 来完成。 MVC 应用程序中特定 Controller 的属性 - 都很好。此外,MVC 应用程序应该能够与 Web API 交互。

其次,我想要一个能够与 Web API 交互的移动应用程序。这里的一个关键点是我不会要求用户在应用程序中注册。所以基本上,(我现在的想法)API 唯一会看到的是“这个 token 属于“AndroidApp”用户并且密码为 X - 当然,我知道你,我'我会授予您访问权限”。在我看来,这有点“不安全”,这意味着移动应用程序的所有用户都将共享相同的身份验证凭据。

问题:

  • 用户 A 是获准访问 MVC 应用程序的用户之一 - 我希望 MVC 应用程序和之后的 Web API 都能识别他。有没有一种简单的方法可以在两个数据库之间同步数据,或者我应该在两个数据库中都注册他(一个用于MVC,一个用于API)?可能还有更好的第三种选择我没有想到。
  • 用户 B 是移动应用程序的用户,他应该不能访问 MVC 应用程序。如何确保这一点?显然,MVC 用户数据库不会有任何关于移动应用程序用户的信息。我只是想知道在应用程序中嵌入一对身份验证凭据的安全性方面 - 我觉得不太好。

我偶然发现了 this问题,这基本上和我的一样。但我真的没有看到 web 应用程序(在我的例子中是 MVC 应用程序)的授权代码授予流程的必要性,正如接受的答案所暗示的那样。

我希望我的问题是有道理的,否则请告诉我:)

最佳答案

我的回答并没有直接回答您的问题,而是提供了一个替代方案。

在过去开发类似的解决方案时,我使用了专业的第三方身份服务 Auth0 .

Auth0您可以拥有不同的应用程序 key 、配置文件,还可以创建作为身份验证管道的一部分执行的规则(webhooks)。他们提供一系列社交登录和 AD 集成。他们提供免费和付费定价。

我不隶属于 Auth0以任何方式,但将使用他们的服务作为 future 任何项目的起点 - 是的,这是一项非常令人印象深刻的服务!

关于c# - 从 MVC 客户端应用程序和移动应用程序保护对 .NET Web API 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181117/

相关文章:

c# - 使用 ClosedXML 创建下拉列表

c# - 如何遍历字典列表?

java - 发生异常时不会调用 @ExceptionHandler 方法

json - 其余扩展不会转换 json

rest - 使用Jmeter的HTTP Request将记录放入Amazon Kinesis

c# - 调用 NotifyIcon 的上下文菜单

javascript - 如何删除使用jquery运行时创建的文本框

c# - 如何添加对动态程序集的引用以编译另一个动态程序集?

asp.net - 如何为 ASP.NET MVC Web 应用程序中使用的图像添加缓存?

c# - Azure BlobBatchClient.DeleteBlobsAsync 始终返回 404 blob not found