OAuth 2.0具有多个工作流程.关于这两个,我有几个问题.
这两种方法在安全性方面有什么区别?哪一个更安全,为什么?
当服务器可以直接发出Access令牌时,我没有看到为什么在一个工作流中添加额外步骤(令牌的交换授权代码)的原因.
不同的网站说,当客户端应用程序可以保证凭据安全时,使用授权代码流.为什么?
我是堆栈溢出的常客,但这是我的第一个问题.
我正在使用OAuth2规范开发授权服务器.我只是在使用密码流时如何确保第一方客户端的真实性.我读了很多论坛,这就是我得到的:
Javascript单页客户端
这篇由Alex Bilbie撰写的博客文章指出,要避免client_secret问题,我们应该:
这很简单; 通过瘦服务器端组件代理所有API调用.这个组件(我们从这里开始称之为代理)将验证来自用户会话的ajax请求.访问和刷新令牌可以以加密形式存储在cookie中,只有代理才能解密.应用程序客户端凭据也将硬编码到代理中,因此它们也不可公开访问.
但现在这个代理可以被冒充我的角度应用的人访问.然后我从安迪菲尔德那里看到了这篇博文:单页应用的OAuth2资源所有者密码流的安全性如何.他基本上说要依靠CORS来避免冒充JS客户端.
使用这两种方法保护我的JS应用程序是个好主意吗?
原生应用(桌面和移动)
对于移动应用程序,我只找到了授权代码和隐式流程的案例.这不是我想要的,因为重定向会损害用户体验.所以我对此的看法是:
我将使用ROP流程,然后使用client_id为此特定安装生成的客户端注册客户端,
并将其附加到用户帐户,接收access_token和
client_secret响应.此客户端发出的任何其他令牌请求必须携带此凭据(因为client_id特定于安装,我将能够检查此客户端是否已经过身份验证).这样,如果有人使用任何凭证来模拟客户端,甚至注册虚假客户端,我可以使用mesures来撤销用户和客户端访问.
我知道这可能是过度思考,我也知道其中一些事情并不能避免任何事情.我觉得我的工作就是尽我所能来保护我的API.
我非常感谢您对此事的看法!我是否真的过度思考?我应该只使用"公共客户"的概念继续吗?
谢谢大家,快乐编码!
我们正在构建一个REST API,它将由我们自己的移动应用程序以及其他应用程序使用.我们希望使用似乎符合oAuths Client Credentials Grant定义的API密钥来保护它不被公开访问.
某些API端点(例如那些会修改用户资源的端点)将要求用户进行身份验证,这似乎符合资源所有者密码凭据授权定义.
这个问题基本上总结了与下面相关的相同场景,但没有要求任何实际实现可能的示例:
使用OAuth2的资源所有者密码凭据授予类型时,如何保持客户端凭据的机密性
这是一个难以构建的问题.我已经看过尽可能多的类似问题,但我们似乎都没有回答以下问题:
这样的事情如何发挥作用?除了在某些端点上为用户请求/传递access_token之外,客户端是否只传递API密钥参数/标头以及每个请求?
在源代码(特别是ruby/rails)方面,是否存在任何可公开访问的示例?
另外,我并没有严格依赖oAuth,所以让我知道是否有其他安全且经过验证的方法可以做同样的事情.