【问题标题】:OAuth and external auth providersOAuth 和外部身份验证提供程序
【发布时间】:2014-09-16 08:34:40
【问题描述】:

我正在 OWIN 上构建需要授权的 WebAPI。我实现了 OAuth 2.0,我对此非常满意。目前,已经实现了grant_type“密码”身份验证,现在我需要一种使用外部身份验证系统的方法,即 Facebook、Google 等。

我想弄清楚的情况是这样的:

  1. iOS/Android 应用使用原生库向 Facebook 用户授权并获取 Facebook access_key
  2. 我应该将该 access_key 获取到我的 OAuth OWIN 后端
  3. 使用 Facebook API 测试访问密钥
  4. 获取user_id
  5. 然后将 user_id 映射到我系统中的用户
  6. 为该特定用户颁发身份令牌

我在概念上是否正确,如果正确,我应该如何在 OAuth 管道中实现这一点?

【问题讨论】:

    标签: asp.net-web-api oauth oauth-2.0 owin katana


    【解决方案1】:

    我就是这样做的。要实现它,您将需要 Microsoft.Owin.Security.Facebook nuget 包。

    这是一篇很好的文章,解释了如何使用这个包。 http://blogs.msdn.com/b/webdev/archive/2013/10/16/get-more-information-from-social-providers-used-in-the-vs-2013-project-templates.aspx?PageIndex=2

    基本上,在您的 owin 启动类中,您添加对 app.UseFacebookAuthentication(); 的调用

    然后从 HttpContext 中获取 IPrincipal 并进行配置。

    【讨论】:

    • 我采取了不同的方法,仅供参考,我在此处发布问题之前检查了 Microsoft.Owin.Security.Facebook :) 这对我来说不是正确的方法,因为它超出了使用控制器和重定向的 OAuth 管道。
    • @DovydasNavickas - 我和你在一起。我想做完全相同的事情。你最终是如何做到这一点的?是否有适合传递外部 auth_token 的 OAuth grant_type,就像您从 Facebook 获得的一样?
    • @ChrisSwain 我最终在 OAuth 密码字段中从 Facebook 传输了 auth_token,并添加了另一个不在 OAuth 规范中的字段,称为 Provider。这样我就可以为不同的提供商提供服务,例如Facebook、谷歌、Twitter 以不同的方式,它仍然属于 OAuth 标准,但 Provider 字段除外。
    • 我正在使用自定义 grant_type 研究 OAuth 2“断言”流程。我相信这可能是 OAuth 流程,它允许处理这种情况所需的灵活性。参考:tools.ietf.org/html/rfc6749#section-4.5
    • 现在查看文档,我想起了我为什么诋毁第 4.5 节。对于传统的“重新加载”浏览器应用程序来说,这是一个很好的用例,但对于我正在开发的单页“非重新加载”应用程序来说不是很好,因为它希望 grant_type 是从授权服务器获取的绝对 URL,我这样做了在我的情况下不需要那个。我已经从 Facebook 获得了 access_token,我需要使用我的 API 进行身份验证作为第二步。这就是我使用 grant_type=password&password={access_token}&provider=facebook 的原因。另外,我可以通过这种方式很容易地支持用户名/密码场景。
    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 2018-05-18
    • 2014-07-13
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2015-08-24
    相关资源
    最近更新 更多