我的应用程序中出现错误“未经授权”的问题。我正在使用 Spring Security 和 oauth2。我的客户和用户存储在数据库中。当我开始使用数据库中的客户端时,PostMan 中出现错误 401。客户端正在保存在数据库中,但是当我想从 localhost:8080/oauth/token 获取令牌访问权限时仍然出现错误。以下是我的来源:授权服务器配置:公共类 AuthorizationServerConfig 扩展 AuthorizationServerConfigurerAdapter {@Autowiredprivate AuthenticationManager authenticationManager;@Autowiredprivate TokenStore tokenStore;private CustomClientDetailsService customClientDetailsService;@BeanPasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder();}@Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.tokenKeyAccess("permitAll()") .checkTokenAccess("isAuthenticated()");}@Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.withClientDetails(customClientDetailsService);}@Overridepublic 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;}@Overridepublic String getClientId() { return clients.getClientId();}@Overridepublic Set<String> getResourceIds() { final Set<String> resourcesIds = new HashSet<String>(); resourcesIds.add(clients.getResourceIds()); return resourcesIds;}@Overridepublic boolean isSecretRequired() { return true;}@Overridepublic String getClientSecret() { return clients.getClientSecret();}@Overridepublic boolean isScoped() { return true;}@Overridepublic Set<String> getScope() { final Set<String> scopes = new HashSet<String>(); scopes.add(clients.getScope()); return scopes;}
2 回答
慕后森
TA贡献1802条经验 获得超5个赞
您应该在 postman 中提供 aclient_id
和 a client_secret
,在授权部分,您可以设置 Basic Auth。
在username
字段中,输入您的client_id
和 在 中password
,输入您的client_secret
.
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
“/oauth/token”中的“未经授权”可能意味着您没有HTTP Basic Auth
在请求标头中提供凭据。据我所知,该端点默认情况下使用存储在oauth_client_details
实体中的登录名和密码进行保护。查找client_id
+client_secret
对并将其提供给 Postman 并使用 Authorization->Basic Auth 设置。
添加回答
举报
0/150
提交
取消