Java oauth令牌终结点的密码

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

我正在尝试将OAuth添加到使用Spring框架开发的rest服务中。我正在使用基于注释的配置和spring引导来运行它

在我的项目中,我有以下课程:

@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协议以以下方式使用此访问令牌:

  • 应用程序使用者获取请求令牌

  • 用户在服务提供商的站点上被重定向,并在那里授权请求令牌。(如果通过Http basic进行授权,则应添加名为“authorization”和值为“basic EncodeBase64(“name:password”)”的请求头,其中EncodeBase64是一个函数,“name”和“password”是用户名和用户密码

  • 应用程序使用者交换访问令牌上的请求令牌

  • 应用程序使用者向服务的API发送授权请求

  • 在和中找不到其他信息


    我希望您已经找到了问题的答案(或者更接近它)。=)

    您使用的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
    对的编码值。我说得对吗?我错过了什么?这些密码都不起作用。我总是收到
    错误:“未经授权”消息:“错误凭据”