Ben*_*old 12 api oauth-2.0 single-page-application
我正在为我正在开发的应用程序实现基于OAuth 2的授权模型.我正在为最终用户提供使用Facebook登录或使用我的API设置电子邮件/密码帐户的功能.使用密码授权,电子邮件/密码验证很简单.我正在寻找Facebook登录流程的帮助.
我的应用程序是一个单页面应用程序,它使用JSON API(我的"资源服务器").我正在使用Facebook JavaScript SDK来授权Web应用访问最终用户的电子邮件地址.
当用户尝试使用Facebook登录时,整个过程发生在Facebook和Web应用程序之间.因此,在使用Facebook的OAuth服务器验证令牌之前,我的API无法信任Facebook授权令牌.
截至目前,我正在将Facebook传递accessToken
给我的API,然后通过服务器到服务器调用"我"图API来验证用户对Facebook的授权.以下是我当前设置的说明:
所以,在这一点上,我有一个Facebook访问令牌和一个电子邮件地址.我需要在我的API服务器和Web应用程序之间保持会话.此时持久化会话的标准方法是什么?
从阅读OAuth文档来看,这似乎是我的API服务器和Web应用程序之间需要"隐式授权"的情况类型,但该授权类型在我正在使用的OAuth包中不可用.该软件包的作者还说,隐性拨款"非常不安全".
我的另一个想法是,我可以创建随机客户端ID和客户端密钥,然后将它们传递回Web应用程序,以便它可以通过凭据授权请求访问令牌.这对我来说似乎不合逻辑.为什么我不创建一个访问令牌并将其发送回客户端直接使用?
我应该在Facebook的初始授权后直接在我的网络应用程序和API服务器之间维护身份验证,这是正确的吗?
我意识到我可以生成随机密码并向用户发送HTTP Basic令牌,但除非没有任何好处,否则我更愿意使用OAuth.
我们正在做的正是您在 DynamicApis.com 上所说的。
这是我们正在做的事情:
1) 提示用户登录。在我们的例子中,我们自己编写 oAuth2 访问令牌,或者我们可以通过 facebook、github 等代理您...但最终驱动 DynamicApis 会话的 oAuth2 令牌是归我们所有。但如果工作流程的其余部分完全由 GitHub 等第三方编写,则工作流程的其余部分将完全相同。
2) 用户使用电子邮件/密码登录。
3) 使用授权码将用户重定向到 DynamicApis.com
4) DynamicApis.com 交换访问令牌的授权代码(服务器到服务器调用)。至此我刚刚解释了oAuth2流程
5) 此时,我们(假设加密)代表该用户返回和颁发的访问令牌,并将其用作会话提供程序(假设基于 Sql Server)的 KEY 。该会话提供程序归 DynamicApis.com 所有。
6) 现在您的会话提供程序可以正常工作。您有一个代表登录用户的密钥(散列/加密的访问令牌)以及与该密钥关联的多个键/值。
您的会话提供程序将保留您想要代表用户存储在数据库或您使用的任何内容中的数据的会话状态(键值对)
会话提供程序的到期日期应等于访问令牌的到期日期(或小于访问令牌的日期)。
当用户注销时,会话将被销毁。
会话密钥应以加密形式存在于 cookie、url 中,或隐藏在页面上(就像今天保留会话密钥一样)
7)噗。您有一个已登录用户的会话。
如果您愿意,您实际上可以重用大部分内置的 ASP.NET 会话提供程序逻辑。或者您也可以像我们在 DynamicApis.com 上那样构建自己的自制系统。
归档时间: |
|
查看次数: |
8218 次 |
最近记录: |