oauth令牌端点的密码

时间:2014-07-07 21:08:42

标签: java spring-security oauth-2.0

我正在尝试将OAuth添加到我使用Spring框架开发的休息服务中。我正在使用基于注释的配置和spring-boot来使其运行。

我的项目中有以下课程:

@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

那么这个密码是什么?我在哪里可以找到它?我该怎么设置它?

2 个答案:

答案 0 :(得分:2)

您使用的API来自{​​{3}}。

客户端应用程序使用令牌端点来请求访问资源的令牌。浏览器最终用户不使用它。 OAuth2客户端通常被分配一个“客户端密钥”,可用于在端点进行身份验证,通常使用this builder class所述的基本身份验证。

因此,要回答您的具体问题,您可以在构建器API上使用“secret”方法,并使用该值进行身份验证作为客户端:

clients.inMemory().withClient("web")
    .authorizedGrantTypes("password")
    .secret("webclientsecret")
    ...

此外,“密码”授权意味着客户端请求令牌in the OAuth 2.0 spec,以确保这是您实际想要的。这与密码问题无关。

答案 1 :(得分:1)

这是OAuth访问令牌。它基于用户登录名和密码,用于访问受保护的资源。 URL“/ oauth / token”用于获取访问令牌而不是可用的请求令牌。此请求基于请求令牌密钥进行数字签名。

Oauth协议以这种方式使用此访问令牌:

  1. Application-Consumer获取请求令牌。

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

  3. 应用程序 - 消费者在访问令牌上交换请求令牌。

  4. Application-Consumer向服务的API发送授权请求。

  5. 您无法在OAuth 2 Developers GuideSpring Social Reference

    中找到其他信息

    我希望你能回答你的问题(或者接近它)。 =)