Java oauth令牌终结点的密码
我正在尝试将OAuth添加到使用Spring框架开发的rest服务中。我正在使用基于注释的配置和spring引导来运行它 在我的项目中,我有以下课程:Java oauth令牌终结点的密码,java,spring-security,oauth-2.0,Java,Spring Security,Oauth 2.0,我正在尝试将OAuth添加到使用Spring框架开发的rest服务中。我正在使用基于注释的配置和spring引导来运行它 在我的项目中,我有以下课程: @Configuration @EnableWebSecurity @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) public class SecuritySettings extends WebSecurityConfigurerAdapter { @Override pro
@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecuritySettings extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("123").authorities("ROLE_USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated()
.and().httpBasic().and().csrf().disable();
}
}
我的授权服务器配置如下:
@Configuration
@EnableAuthorizationServer
public static class MyAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("web")
.authorizedGrantTypes("password")
.authorities("ROLE_CLIENT","ROLE_TRUSTED_CLIENT","ROLE_USER")
.scopes("read", "write")
.resourceIds(RESOURCE_ID);
}
}
当我向/oauth/token/
端点发出GET请求时,我被要求输入HTTP基本凭据。当我尝试使用admin
用户登录时,会记录以下内容
o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: NoSuchClientException, No client with requested id: admin
以web
的形式输入用户名是可行的,但我不知道它的密码。默认密码已被记录,但也不起作用
Using default security password: f23087f8-58ce-e3d-bc62-58bf0963e75c
那么这个密码是什么?我在哪里能找到它?如何设置它?这是OAuth访问令牌。它基于用户登录名和密码,用于访问受保护的资源。 URL“/oauth/token”用于获取访问令牌,而不是可用的请求令牌。此请求基于请求令牌机密进行数字签名 Oauth协议以以下方式使用此访问令牌:
我希望您已经找到了问题的答案(或者更接近它)。=)您使用的API来自 客户端应用程序使用令牌端点请求资源的访问令牌。浏览器最终用户不使用它。OAuth2客户机通常被分配一个“客户机密码”,它们可以使用该密码在端点进行身份验证,通常使用所描述的基本身份验证 因此,为了回答您的特定问题,您将在builder API上使用“secret”方法,并使用该值作为客户端进行身份验证:
clients.inMemory().withClient("web")
.authorizedGrantTypes("password")
.secret("webclientsecret")
...
此外,“密码”授权意味着客户机请求令牌,只是为了确保这是您真正想要的。这与这里的密码问题无关。Hi!谢谢你的回复。你说得对,这正是我在这里努力实现的目标。我使用浏览器只是为了尝试用户名/密码组合。我实际上已经读过你之前链接的页面。文档中的示例请求发送一个
Authorization
头,因此在我的例子中,它应该类似于basicencode64(web:webclientsecret)
。我说得对吗?我还是不能让它工作。我终于让它工作了。我接受你的答案,因为它实际上回答了我的要求,所以我可以隔离这个问题。我在研究Spring OAuth2中与客户端定义相关的另一个问题时找到了你的答案。你愿意发表评论吗?这里是链接:谢谢你的回复。实际上,我使用grant_type:password向令牌端点发出post请求,如中所示。用户名是admin
,用户密码是123
,我要在授权请求头中编码的东西是Authorization:Basic[X]
,其中X是web:clientsecret
对的编码值。我说得对吗?我错过了什么?这些密码都不起作用。我总是收到错误:“未经授权”消息:“错误凭据”