我想用Spring Boot实现OAuth2。我看到了最大的演示,他们使用了硬编码的客户端ID和秘密。在一个真实的项目中,我们如何使用这些?
我附上了两张照片。一个是客户端代码,我使用Angular,另一个是服务器代码,使用Spring Boot OAuth2。
您可以在客户端(属性文件,数据库,JNDI,...)保存客户端ID,因为它是公共标识符,请参阅RFC 6749:
2.2。客户标识符
授权服务器向注册客户端发出客户端标识符 - 表示客户端提供的注册信息的唯一字符串。客户端标识符不是秘密;它暴露给资源所有者,不得单独用于客户端身份验证。客户端标识符对于授权服务器是唯一的。
您可以在客户端(属性文件,数据库,JNDI,...)保存客户端密钥,如果您有机密客户端,请参阅RFC 6749:
2.1。客户类型
OAuth根据其与授权服务器安全身份验证的能力(即,维护其客户端凭据机密性的能力)定义了两种客户端类型:
- 机密 客户端能够维护其凭证的机密性(例如,在对客户端凭证具有受限访问权限的安全服务器上实现的客户端),或者能够使用其他手段进行安全客户端认证。
- 上市 客户端无法维护其凭证的机密性(例如,在资源所有者使用的设备上执行的客户端,例如安装的本机应用程序或基于Web浏览器的应用程序),并且无法通过任何其他方式进行安全的客户端身份验证。
对于公共客户端,您无需身份验证,请参阅RFC 6749:
2.3。客户认证
[...]授权服务器可以与公共客户端建立客户端身份验证方法。但是,授权服务器不得依赖公共客户端身份验证来识别客户端。
但并非所有授权服务器都支持授权代码授予的公共客户端。
另一种方法是使用隐式授权(没有客户端密钥),请参阅RFC 6749:
4.2。隐含的格兰特
隐式授权类型用于获取访问令牌(它不支持刷新令牌的发布),并且针对已知操作特定重定向URI的公共客户端进行了优化。这些客户端通常使用脚本语言(如JavaScript)在浏览器中实现。
[...]
隐式授权类型不包括客户端身份验证,并且依赖于资源所有者的存在和重定向URI的注册。由于访问令牌被编码到重定向URI中,因此可能会将其暴露给资源所有者和驻留在同一设备上的其他应用程序。
但并非所有授权服务器都支持隐式授权,例如GitHub。