【问题标题】:How to have two different types of users for WebAPI and MVC .netcore 2.0如何为 Web API 和 MVC .net core 2.0 提供两种不同类型的用户
【发布时间】:2019-09-24 10:46:42
【问题描述】:

我正在创建一个 asp.net core 2.0 应用程序(带有 EFCore 一个身份),它具有:

  1. 人们可以注册和购买不同​​计划的网站 (MVC) (不同的价格等)。因此,这些用户必须确认电子邮件和 添加其他信息以便能够使用它的服务,其中包括 创建和管理移动应用用户。
  2. 具有 WebAPI 后端的移动应用程序。该应用程序的用户是工人 谁从一个客户到另一个客户,添加必须是 现场收集到应用程序。该信息由 网站用户。

所以,我认为有两种不同类型的用户:只有一个会使用该网站,并且需要(更多?)安全性,因为它需要确认的电子邮件,以防他忘记密码等。还有这些用户将能够看到移动应用程序收集的所有报告和(敏感)信息。此身份验证基于 cookie。

另一方面,移动应用程序用户永远无法访问除了他们自己输入的信息之外的信息,也不需要他们的电子邮件。他们只需要网站用户发布的用户名和代码/密码。而这个身份验证就是不记名令牌。

我更愿意在一个项目中完成所有这些,所以我的问题是如何在一个项目中处理这两种类型的用户(和身份验证过程)?

我阅读了有关授权方案、声明、过滤器、安全属性、配置 startup.cs 的文档。我相信如果只是角色上的不同,我可以处理这个问题。我在这里搜索的关于不同类型用户的问题似乎真的是关于角色的,但我认为不能这样处理。例如,移动应用用户不会注册自己,也不会处理密码等,所有这些都将由拥有“完整帐户”的网站用户管理。

如果被问到我可能会发布一些代码,但我真正需要的是一些指导,例如:

  • 不要在一个项目中做,做两个,一个用于 MVC,一个用于 WEBAPI,并在每个项目中处理不同的安全/授权/注册问题;

  • 或者:您需要创建两个不同的“AppUser”类和(在这种情况下,如何配置 Identity / 我添加到 startup.cs 的内容?)

我确实发现了这个: https://medium.com/agilix/asp-net-core-supporting-multiple-authorization-6502eb79f934

但这仍然缺少关于不同用户的部分。很可能我已经在 microsoft 文档和其他地方阅读了我需要执行此操作的信息,但我无法将它们拼凑在一起 - 例如,我知道如何在 Identity 中创建和注册自定义用户类,我了解如何将过滤器和属性添加到 MVC 管道,我认为我需要所有这些来完成我需要的,但我无法逐步理解我需要做什么。

【问题讨论】:

    标签: c# asp.net-core-mvc asp.net-core-2.0 asp.net-core-webapi


    【解决方案1】:

    我认为您只需要为访问 web-api 的移动用户定义一个用户定义。此用户将无权使用 Web 应用程序。您只需要确保当从您的移动应用程序发出 web-api 调用时,它只会影响链接的 web 用户数据。我假设这就是发布的代码/密码的用途。

    【讨论】:

    • 我认为你所说的关于 web-api 用户只影响它自己的数据的部分是正确的。但是在仔细考虑我的问题后,我发现我只有一个困难:如何让网站用户有需要和确认的电子邮件,而 webAPI 用户没有?
    【解决方案2】:

    您可以使用 ASP.net 核心授权和身份验证轻松实现此目的。如果您还使用 Entity Framework Core,您将在设置 Web 应用程序中的所有帮助表单时获得很多帮助。

    您的关键是设置 2 个不同的角色。一个用于移动应用程序,一个用于 Web 应用程序。在登录部分,您检查该角色,如果用户是正确的角色,您允许用户访问应用程序。你在网上有很多这方面的信息,如果你搜索“mvc core role based Authorization”,你会发现很多帮助。

    通过这种方法,您还可以轻松地在网络应用程序上设置一个管理部分,用于处理移动应用程序用户,您可以在其中添加新用户并处理他们的密码。

    当您使用这种方法时,您会失去对表的一些控制,但如果您真的不需要,为什么还要发明轮子呢?

    祝你好运!

    【讨论】:

    • 我想得更多,还与我的客户(我正在为他们开发这一切)交谈,我得出的结论是,这一切都归结为让网站用户需要确认电子邮件,但不是移动应用程序用户。我将身份配置为为所有用户确认电子邮件。如果您知道如何实现这一点,我将不胜感激,但无论如何我认为我可以通过更多的研究来解决这个问题。
    • 您从网站创建移动应用用户,对吗?如果您想要确认电子邮件,您可以在创建移动应用程序用户时简单地模拟检查并始终从中生成真实结果,而不涉及用户。然后,当网络应用程序用户登录时,您检查是否确认和正确的角色,并在移动应用程序用户登录时进行相同的检查。
    • 如您所见,我强烈建议在一个表中与用户一起工作。从长远来看,可以将其提取到一个独立的登录服务中,以便更多的应用程序可以使用。核心的力量使得将应用程序创建到微服务中并将它们部署在云中成为可能。也许你的客户端解决方案不是 2 个应用程序,也许是 7 个不同的微服务共同形成了 2 个应用程序的印象?
    • 天哪,你是对的。我不知道为什么我没有想到(我们称之为)“伪造”电子邮件确认。非常感谢!除了“他们是不同类型的用户,应该有两个表、两个不同的类等”之外,我想不出任何其他东西,如果我从头开始编程,我可以很容易地实现这一点。不过这个解决方案解决了我的问题,再次感谢!
    • 是的,也许更好的解决方案会与我正在做的不同,但我曾经用 PHP 编程并使用共享主机等。对我来说,制作网站和php 中的 api,我选择使用 c#,因为该应用程序是 xamarin 形式,然后我决定使用完整的 .net。我想学习这也将有助于更好地决定未来什么最适合不同的工作?所以关于微服务,我确实想到了,但我选择专注于 efcore、c#、Identity,后来更多地研究它。我认为这是我现在买不起的另一件事
    猜你喜欢
    • 2021-08-27
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2019-01-12
    • 2020-01-29
    • 2023-04-08
    • 2018-03-26
    相关资源
    最近更新 更多