在默认的OAuth2场景中,需要发送请求到 /oauth/token 响应AccessToken,这能满足大部分的需求;但在更复杂的场景中,比如在请求时需要传递更多的信息,如deviceId(设备ID),tenantId(租户ID)等,这时默认的实现就不满足要求,需要另写API来实现(同时传递OAuth2需要的参数,如client_id),在后台代码实现中,需要通过代码来生成AccessToken。
在spring-oauth-server的2.0.1版本中,增加了通过代码生成AccessToken的JAVA类,具体如下:
InlineAccessTokenInvoker.java — 生成AccessToken的抽象类,提供许多公共方法实现;
ClientCredentialsInlineAccessTokenInvoker.java — 生成grant_type=client_credentials 时的AccessToken类;
PasswordInlineAccessTokenInvoker.java — 生成grant_type=password 时的AccessToken类;
RefreshTokenInlineAccessTokenInvoker.java — 生成grant_type=refresh_token 时的AccessToken类;
具体的使用示例可查看每个类的单元测试代码。一个示例如下:
调用成功返回 AccessTokenDto 对象,若失败则会抛出OAuth2中的异常对象,如:InvalidGrantException。
相关阅读
处理/oauth/token与/oauth/authorize的Endpoint