【问题标题】:Add Existing Membership/Role Provider to new WebAPI with Basic Authenication使用基本身份验证将现有成员资格/角色提供者添加到新 Web API
【发布时间】:2014-11-12 16:27:45
【问题描述】:

好吧,当涉及到 WebAPI 项目和现有数据库时,“基本身份验证”显然没有什么“基本”……但我离题了。

情况:

现有 asp.net 网站应用程序 (WSP) 具有较旧的 .net 成员资格,提供用户角色和表单身份验证。

将此数据库与具有代码优先迁移、MVC5 优点等的新 WebAPI 2.2 应用程序一起使用,我想使用诸如 [Authorize] 和基于角色的属性来控制对我们的集成合作伙伴将调用的各种方法的访问。

问题:

我是否应该从我的其他未开发的 MVC 应用程序之一导入 IdentityModel 类,然后将那些现有用户/角色导入那些“简单成员”表,或者您是否建议仅添加现有成员表/模型以及可能具有自定义成员资格供应商?

如果是后者,有人可以给我指出一篇文章或回答他们在哪里做的吗?我想我的脑袋正在旋转,即使我确实设法用谷歌搜索了正确的东西,我也不认为我会看到它。

提前致谢。

【问题讨论】:

  • 你说你实现了这个。您在使用旧的会员服务提供商吗?我在同一条船上,我想知道如何利用旧的会员提供商,但使用不记名令牌。任何指导将不胜感激。
  • @Indy-Jones 您是否使用 simplemembership 提供程序而不是 Asp.Net Identity 实现了基于承载的身份验证?如果是的话,你能在这里分享你的代码吗?谢谢。

标签: asp.net-mvc asp.net-web-api2 simplemembership


【解决方案1】:

我不建议对 Web API 使用基本身份验证,您最终会在 Authorization 标头中随每个请求发送用户名/密码,这将强制使用您的 API 的客户端应用程序按顺序在本地存储用户名/密码满足您的 API 需求,而您无法控制这些应用程序,也不知道它们将如何存储这些凭据

我的建议是检查 Bearer Token Based Authentication 这是您应该遵循的正确方法,如果您正在寻找简单的东西并且可以被视为基本身份验证的替代品,那么您需要实施只有一个名为“资源所有者凭据流”的 OAuth 2.0 流。此流程的想法非常简单,您需要做的就是将用户名/密码与在一段时间后过期的不记名令牌(加密和签名字符串)交换,然后在授权标头中继续发送此字符串(令牌)对于每个请求。我已经编译了关于这个名为“Token Based Authentication using ASP.NET Web API 2”的详细博客文章。希望它对您的情况有用。

现在关于您的会员提供商,我在帖子中使用 ASP.NET Identity 2.0,您不需要这样做,您可以保留自定义数据库表或使用旧的会员提供商.您可以在您喜欢的任何数据库存储中使用基于令牌的身份验证中的角色。

如果您使用 ASP.NET Identity 会更容易,但如果您不想将数据迁移到新的会员系统,它会起作用。您将结束编写额外的代码行来实现这一点。希望这能回答您的问题,如果您需要进一步的帮助,请告诉我。

【讨论】:

  • 这是伟大的泰泽尔。我实现了它并让它工作得很好。还有一个问题...我们有与我们的客户集成的软件提供商,因此您拥有用户的用户名/密码,但我们还想根据软件提供商跟踪请求来自谁。有没有办法在验证时包含另一个“字段”并将令牌保存在数据库中,以便我们稍后可以审核 API 调用并说:“在这个日期/时间,我们通过这个软件提供商接到了这个人的电话。”
  • 是的,您可以在请求令牌时添加自定义字段,然后您可以将此字段存储在您的数据库中。如果我的回答有帮助,请将其标记为答案并点赞。
  • 感谢Taiseer,您的回答很好。您说您正在使用 ASP.NET 标识。但我想要我现有的数据库(postgresql)表。有没有要实现的博文?
猜你喜欢
  • 2014-01-22
  • 2012-07-17
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多