谨防OAuth应用凭证泄露:将应用程序代码存储在GitHub中?OAuth应用凭证也存储在那里,尤其是客户端机密吗?这是当今凭证泄露的头号来源。如果这些凭证被盗,任何人都可以假装是你。如果您认为凭证可能已经泄露,请立即重新生成。另外,不要用分布式代码密封客户机,比如通过应用商店或者从客户端JavaScript下载的应用程序。不要对应用程序中的令牌进行硬编码:简化代码以长时间获取令牌并存储在应用程序中可能很有吸引力。将令牌当作密码处理:令牌和API密匙允许任何人访问其资源。所以和密码一样重要。对他们也是如此。
OAuth不是身份验证协议:OAuth是访问任命资源的权限。不是身份验证协议(尽管名字如此)。把代币当成酒店卡,需要身份验证才能拿到酒店钥匙,但是一旦有了,就永远无法证明你是谁。API提供商不应该依靠令牌所有权作为身份证明,就像最近用户信息泄露证明的那样。我们应该看看,一个补充标准,而不是试图在OAuth上实现身份验证。OIDC允许用户在不共享凭证的情况下,与应用程序共享其配置文件的某些方面。
谨防存储在JWT中的内容,以及谁有权访问:JWT可以声明的形式存储大量信息,捕获时可以轻松分析(除非加密)。如果使用JWT传输只对后端服务有用的信息,可以采用不同的方法:JWT可以声明的形式存储大量信息,捕获时可以轻松分析(除非加密)。
总是通过HTTPS和请求文本传输令牌:这是为了限制令牌在传输过程中捕获或写入代理日志或服务器日志的风险。还应确保TLS1.2/1.3和最安全的密码套件仅用于发行和验证令牌所涉及的所有参与者。使用专用浏览器视图请求同意信息:很多应用使用嵌入式用户代理,但应该避免这样做,因为它不允许用户正确验证他们正在与哪个网站通信。此外,该应用程序将能够完全查看用户输入的凭证。一些API提供商对这种做法采取了强有力的措施,就像OAuth应用的最佳实践标准一样。