【发布时间】:2016-09-09 02:21:22
【问题描述】:
我是堆栈溢出的常客,但这是我的第一个问题。
我正在使用 OAuth2 规范开发授权服务器。而且我只是被困在如何在使用密码流时确保第一方客户端的真实性。我阅读了很多论坛,这就是我得到的:
-
Javascript 单页客户端
Alex Bilbie 的这篇博文指出,为了避免 client_secret 问题,我们应该:
这很简单;通过瘦服务器端组件代理所有 API 调用。这个组件(让我们从这里开始称它为代理) 将验证来自用户会话的 ajax 请求。访问 和刷新令牌可以以加密形式存储在 cookie 中 只有代理才能解密。应用程序客户端凭据 也将被硬编码到代理中,因此它们不会公开 也可以访问。
但是现在这个代理可以被冒充我的人访问 角度应用程序。然后我看到了安迪的这篇博文 守场员:How Secure is the OAuth2 Resourc Owner Password Flow for Single Page Apps。他基本上说要依靠CORS来 避免冒充 JS 客户端。
使用这两种方法来保护我的 JS 应用程序是个好主意吗?
-
原生应用(桌面和移动)
在移动应用的情况下,我只找到了 Authorization 的情况 代码和隐式流。这不是我想要的,因为重定向 会影响用户体验。所以我的想法是:
我将使用 ROP 流程,然后使用
client_id为此特定安装生成并附加它 到用户帐户,收到access_token和client_secret作为回应。此提出的任何其他令牌请求 客户端必须携带此凭据(因为client_id是特定的 对于安装,我将能够检查此客户端是否 已经认证)。这样,如果有人使用任何凭证 冒充客户,甚至注册虚假客户,我可以接受 撤消用户和客户端访问权限的措施。
我知道这可能是多虑了,而且我也知道其中一些事情并不能避免任何事情。我只是觉得尽我所能保护我的 API 是我的工作。
非常感谢您对此事的看法!我真的想多了?我应该只使用“公共客户”的概念并继续吗?
谢谢大家,编码愉快!
【问题讨论】:
-
你有没有找到这个问题的答案,我也有同样的想法
标签: javascript security authentication mobile oauth-2.0