我是堆栈溢出的常客,但这是我的第一个问题.
我正在使用OAuth2规范开发授权服务器.我只是在使用密码流时如何确保第一方客户端的真实性.我读了很多论坛,这就是我得到的:
Javascript单页客户端
这篇由Alex Bilbie撰写的博客文章指出,要避免client_secret问题,我们应该:
这很简单; 通过瘦服务器端组件代理所有API调用.这个组件(我们从这里开始称之为代理)将验证来自用户会话的ajax请求.访问和刷新令牌可以以加密形式存储在cookie中,只有代理才能解密.应用程序客户端凭据也将硬编码到代理中,因此它们也不可公开访问.
但现在这个代理可以被冒充我的角度应用的人访问.然后我从安迪菲尔德那里看到了这篇博文:单页应用的OAuth2资源所有者密码流的安全性如何.他基本上说要依靠CORS来避免冒充JS客户端.
使用这两种方法保护我的JS应用程序是个好主意吗?
原生应用(桌面和移动)
对于移动应用程序,我只找到了授权代码和隐式流程的案例.这不是我想要的,因为重定向会损害用户体验.所以我对此的看法是:
我将使用ROP流程,然后使用client_id为此特定安装生成的客户端注册客户端,
并将其附加到用户帐户,接收access_token和
client_secret响应.此客户端发出的任何其他令牌请求必须携带此凭据(因为client_id特定于安装,我将能够检查此客户端是否已经过身份验证).这样,如果有人使用任何凭证来模拟客户端,甚至注册虚假客户端,我可以使用mesures来撤销用户和客户端访问.
我知道这可能是过度思考,我也知道其中一些事情并不能避免任何事情.我觉得我的工作就是尽我所能来保护我的API.
我非常感谢您对此事的看法!我是否真的过度思考?我应该只使用"公共客户"的概念继续吗?
谢谢大家,快乐编码!