我在这里与一些非常著名和有趣的话题进行了一般性的讨论"基于令牌的认证";。
我需要我的注册用户登录API。场景很简单,我们想将登录详细信息传递给服务器。服务器将使用数据库检查凭据。如果凭证是正确的,则服务器将创建";会话Id";并返回给用户(客户端)。在随后的请求中,用户只需要将该";会话Id";以验证和访问受保护的数据。
很多人建议使用OAuth 2.0,也有人建议使用Custom Logic。在自定义逻辑中,他们要求非常确信安全性。我阅读了OAuth的文档,它很好,很有描述性。我也喜欢用它。但无论我在哪里搜索OAuth身份验证,他们都会给出第三方登录的示例。
我在身边安装了PhpOAuth扩展,以支持此功能。在示例中,他们要求首先使用"getRequestToken";作用使用该请求令牌getAccessToken"函数来获得"访问令牌";。使用该访问令牌只需要调用"获取";以获取受保护的数据。
现在我的问题是,
- 在我的场景中,我需要请求令牌吗?可以直接获得Access Token吗
- 什么是OAuth使用者密钥和OAuth消费者密钥?我的申请中需要这样的密钥吗?我相信它只允许第三方应用程序使用。就我而言,我是资源所有者,我是消费者
- 你们有什么可供我学习的榜样吗
- 你知道任何一个众所周知的用于PHP的OAuth框架吗
- 这需要任何额外的数据库支持吗;用户";桌子用于存储OAuth详细信息
- 如有任何其他文件可供研究,我们将不胜感激
我在OAuth中阅读了不同的Grant类型,但对如何使用来实现我的方法感到困惑。
提前谢谢。
根据我所读到的内容,您根本不需要OAuth。如果有第三方需要访问您的用户资源,则需要OAuth。
- 正如您所提到的,您只需要一个类似
https://myserver.com/signin?user=john.doe@gmail.com&password=12345
的登录API - 成功登录后,服务器会生成一个GUID并针对用户进行存储。你可以叫它sessionId/cookieId任何你喜欢的东西。响应可能类似于
'{user:john.doe@gmail.com; sessionId=KJN93EJMQ3WEC9E8RCQJRE8F9E}'
- 对于后续调用,sessionId可以在标头中传递
- 服务器验证会话并允许用户进入
附加注意事项:
- 我假设您的服务器是HTTPS,因此URL上的用户/pwd是加密的
- 为了安全起见,您可能希望使sessionId无效。定期续订sessionId
- 注销,清除用户的sessionId
如果不是通过REST.
我之前发布的使用OAuth2.0登录的要求。
通常人们认为OAuth2.0只是由第三方应用程序代表资源所有者从资源中心获取数据。这种方法被称为授权代码。
OAuth2.0具有各种"授权授予";。有四种类型
- 授权代码
- 隐含的
- 资源所有者凭据(用户凭据)
- 客户端凭据
经过研究,我意识到";资源所有者证书";最适合我。我找到了一个完美的库,可以帮助您内部了解背景过程。这是下载的GitHub链接。
这里发现两个主要问题,
- 当我在Chrome中使用我的Mozila创建的访问令牌时。令人惊讶的是,它允许我从其他浏览器访问我的私人数据
- 我不确定,但这种方法会和AJAX类型的调用(jQuery工具)一样工作吗
如果有人有想法,请分享。
谢谢,
Sanjay