【问题标题】:Securing access to .NET Web API from both MVC client app and mobile applications保护从 MVC 客户端应用程序和移动应用程序对 .NET Web API 的访问
【发布时间】: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


【解决方案1】:

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

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

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

我与Auth0 没有任何关系,但我会以他们的服务作为未来任何项目的起点 - 是的,这是一项令人印象深刻的服务!

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2014-04-04
    • 2023-03-28
    • 2018-08-26
    • 2018-08-21
    相关资源
    最近更新 更多