【问题标题】:ASP.NET Identity External Providers Web API without cookies没有 cookie 的 ASP.NET 身份外部提供程序 Web API
【发布时间】:2015-02-10 07:32:14
【问题描述】:

我已经看到了几种使用 Identity 在 ASP.NET Web API 中为身份验证设置外部提供程序支持的方法,但是它们都依赖于一个 cookie,该 cookie 在用户被外部提供程序成功授权后设置(称为“ AspNet.External"),然后必须将其转发到 Web API 本身的令牌端点。

有没有什么方法可以规避这种情况并通过 ASP.NET Web API 使用外部身份验证而不需要使用 cookie?引起这种担忧的原因是我想将此身份验证集成到我的移动应用程序中,但用户可以随时禁用 cookie,从而使我的应用程序无法使用。

【问题讨论】:

  • 在常规的 asp.net 项目中,您可以使用 'url' 使用无 cookie 会话,即标识会话的唯一标识符被标记为 URL 作为查询字符串。我希望如果你能在 web api 中得到这样的例子,那将解决你的目的。
  • 我不清楚你在这里问什么。每个请求都必须以某种方式标识自己,这通常使用 cookie,因为这是最安全的方式。您可以使用查询字符串参数,但这非常不安全,因为查询字符串记录在路由和代理日志以及服务器日志中。
  • 是的,我知道请求需要一种识别方式,但我不确定 cookie 是否是最好的方法,因为禁用 cookie 后,身份验证将无法正常工作。或者,即使它们实际上被禁用,cookie 是否会临时存储在 WebView 中?我的意思是确保身份验证适用于所有设备。
  • 我同意 MZetko 的观点,即互联网上没有任何关于此的信息。我能够将刷新令牌与外部登录一起使用,并且不使用 cookie,以 Taiseer Joudeh 的这篇文章为起点:bitoftech.net/2014/07/16/… 但我的解决方案非常难看,因为我必须做很多修改,所以我看也转发这个问题的答案。 (PD:我的 Web API 的客户端是 Angular 应用程序,而不是移动应用程序)。
  • @AugustoBarreto 感谢您引用我的帖子,但在所有情况下,身份验证都将在用户移动浏览器中进行,并且同意将在浏览器中而不是您的移动应用程序中,用户不太可能转向关闭移动浏览器中的 cookie。我想这没有锻炼。您能否与我分享您如何通过社交登录启用刷新令牌?我猜这个实现很复杂吧?

标签: asp.net cookies asp.net-web-api asp.net-identity


【解决方案1】:

使用 OAuth2 怎么样?

  1. https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth/构建一个oauth2服务器,
  2. 将您的服务器 web api 应用设置为资源服务器,并启用 oauth 承载身份验证,该身份验证使用 Authentication 标头,而不是 cookie。
  3. 从 oauth2 服务器获取 access_token 后,为您的客户端请求设置 Authentication 标头。

你可以在这里查看代码:

https://github.com/beginor/owin-samples

【讨论】:

  • 我在想应该有一个更简单的解决方案。这将意味着从地面实施几乎干净......
猜你喜欢
  • 2021-05-30
  • 2019-04-26
  • 2016-01-07
  • 2017-09-28
  • 2013-06-07
  • 2014-07-13
  • 2016-05-26
  • 2014-09-16
  • 2018-05-18
相关资源
最近更新 更多