来自数据库的未经授权的错误 oauth2 客户端

我的应用程序中出现错误“未经授权”的问题。我正在使用 Spring Security 和 oauth2。我的客户和用户存储在数据库中。当我开始使用数据库中的客户端时,PostMan 中出现错误 401。客户端正在保存在数据库中,但是当我想从 localhost:8080/oauth/token 获取令牌访问权限时仍然出现错误。以下是我的来源:


授权服务器配置:


公共类 AuthorizationServerConfig 扩展 AuthorizationServerConfigurerAdapter {


@Autowired

private AuthenticationManager authenticationManager;




@Autowired

private TokenStore tokenStore;



private CustomClientDetailsService customClientDetailsService;




@Bean

PasswordEncoder passwordEncoder() {

    return PasswordEncoderFactories.createDelegatingPasswordEncoder();

}


@Override

public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {

    security.tokenKeyAccess("permitAll()")

            .checkTokenAccess("isAuthenticated()");

}


@Override

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

    clients.withClientDetails(customClientDetailsService);


}



@Override

public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

    endpoints

            .tokenStore(tokenStore)

            .authenticationManager(authenticationManager);

}

}


这是我的 CustomClientDetails :


公共类 CustomClientDetails 实现 ClientDetails {


final static Logger log = LoggerFactory.getLogger(CustomClientDetailsService.class);


private static final long serialVersionUID = 6602529451366778198L;


private Clients clients;


public CustomClientDetails(final Clients clients){

    this.clients = clients;

}


@Override

public String getClientId() {

    return clients.getClientId();

}


@Override

public Set<String> getResourceIds() {

    final Set<String> resourcesIds = new HashSet<String>();

    resourcesIds.add(clients.getResourceIds());

    return resourcesIds;

}


@Override

public boolean isSecretRequired() {

    return true;

}


@Override

public String getClientSecret() {

    return clients.getClientSecret();

}


@Override

public boolean isScoped() {

    return true;

}


@Override

public Set<String> getScope() {

    final Set<String> scopes = new HashSet<String>();

    scopes.add(clients.getScope());

    return scopes;

}


墨色风雨
浏览 127回答 2
2回答

慕后森

您应该在 postman 中提供 aclient_id和 a&nbsp;client_secret,在授权部分,您可以设置 Basic Auth。在username字段中,输入您的client_id和 在 中password,输入您的client_secret.

摇曳的蔷薇

“/oauth/token”中的“未经授权”可能意味着您没有HTTP Basic Auth在请求标头中提供凭据。据我所知,该端点默认情况下使用存储在oauth_client_details实体中的登录名和密码进行保护。查找client_id+client_secret对并将其提供给 Postman 并使用 Authorization->Basic Auth 设置。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python