我们正在构建一个具有以下技术规格的应用程序。
- 角 4/5 [前端]
- SpringBoot 框架 [后端]
- OAuth 2.0 [授权]
- MySQL [数据库]
注意:我们自己有资源服务器,授权服务器
流动
我们为多个客户 [我们的客户] 提供单个实例应用程序,这些客户将拥有自己的用户。每个用户都会收到一封电子邮件,通过我们的应用程序为他们各自的客户授权一些东西。电子邮件链接将包含 client_id、record_id 加密和编码。当用户点击链接时,它应该去 AuthServer,通过其 client_id 授权客户端,并将令牌传回用户代理,以进行任何进一步的操作。
我们浏览了这个Github repo并实现了与示例相同的内容。
AuthServerConfigure
代码如下:
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("my-trusted-client")
.authorizedGrantTypes("password", "authorization_code",
"refresh_token", "implicit")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.scopes("read", "write", "trust").resourceIds("sparklr")
.accessTokenValiditySeconds(60).and()
.withClient("my-client-with-registered-redirect")
.authorizedGrantTypes("authorization_code").authorities("ROLE_CLIENT")
.scopes("read", "trust").resourceIds("sparklr")
.redirectUris("http://anywhere?key=value").and()
.withClient("my-client-with-secret")
.authorizedGrantTypes("client_credentials", "password")
.authorities("ROLE_CLIENT").scopes("read").resourceIds("sparklr")
.secret("secret");
}
我们对传递给 configure 方法的值有一些疑问。
- 这里代表什么
.inMemory().withClient("my-trusted-client")
?这会一直被硬编码吗?由于我们将根据收到的 client_id 验证每个客户端,我们将在哪里提供它以动态验证? - 是
.withClient("my-client-with-registered-redirect")
为了什么?即使这对每个客户来说都保持不变? - repo 中的作者还说我们可以通过验证设置
$ curl -H "Accept: application/json" my-client-with-secret:secret@localhost:8080/oauth/token -d grant_type=client_credentials
,我看到my-client-with-secret:secret
这里通过了。如果要针对不同的客户进行更改,我该如何将此值赋予.withClient("my-client-with-secret")
和.secret("secret")
我们很难理解这些概念。我们的要求很简单,我们将使用 client_id 验证每个客户端并为该客户端生成一个令牌。Grant_types
对于这种类型的要求,我们是否需要其他任何东西?
有人请指出我们正确的方向。