我工作的公司创建了一个供移动设备使用的 API。我一直在阅读有关将 oAuth 用于移动应用程序的信息,据我了解,建议您使用隐式授权,而不是在应用程序中嵌入密钥。
为什么在这种情况下隐式流被认为更安全?这不只是允许任何人访问您的 API,无论他们是否拥有密钥吗?
我工作的公司创建了一个供移动设备使用的 API。我一直在阅读有关将 oAuth 用于移动应用程序的信息,据我了解,建议您使用隐式授权,而不是在应用程序中嵌入密钥。
为什么在这种情况下隐式流被认为更安全?这不只是允许任何人访问您的 API,无论他们是否拥有密钥吗?
这不只是允许任何人访问您的 API,无论他们是否拥有密钥吗?
是的,隐式授权缺乏对客户端进行身份验证的能力,而其他授权可以做到这一点——进一步引入了授权授权所没有的攻击向量,这需要客户端机密。
隐式授权的用例是最终用户的身份验证和客户端对资源(可能由最终用户拥有)的访问,应该由 SPA 应用程序(和任何其他基于 Javascript/用户代理的应用程序)使用。
如果客户端身份验证很重要,则必须实施不同的授权。
隐式授权更安全,因为它不会暴露客户端机密,可以在您的内部应用程序之间共享。
这是关于何时使用(OAuth2)授权和 OIDC 流的好读物https://community.apigee.com/articles/41719/when-to-use-which-oauth2-grants-and-oidc-flows.html
您不应该使用密钥的主要原因是您不能信任设备来保护密钥。您可能知道密钥在 javascript 客户端应用程序中是不安全的,因为 javascript 通常比较容易阅读。同样,获得平板设备或智能手机的黑客或小偷可能能够获取您的应用程序的二进制文件并从源代码中提取密钥。理想情况下,密钥仅用于服务器到服务器的通信,或用于组织内部的应用程序。