问候所有人,我尝试通过Spring Security OAuth配置简单的授权代码流。
我通过以下方法测试了我的授权和资源服务器配置:
但是当我尝试使用rest模板时。它抛出错误消息401 Unauthorized error。
服务器端 - 安全配置:
<http auto-config="true" pattern="/protected/**"
authentication-manager-ref="authenticationManager">
<custom-filter ref="resourceFilter" before="PRE_AUTH_FILTER" />
<csrf disabled="true" />
</http>
<http auto-config="true">
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login default-target-url="/admin.html" />
<logout logout-success-url="/welcome.html" logout-url="/logout"/>
<csrf disabled="true" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider>
<user-service>
<user name="admin" password="123456" authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
服务器端 - 授权和资源配置:
<oauth:authorization-server
client-details-service-ref="clientDetails" error-page="error">
<oauth:authorization-code />
</oauth:authorization-server>
<oauth:client-details-service id="clientDetails">
<oauth:client client-id="admin" secret="fooSecret" />
</oauth:client-details-service>
<oauth:resource-server id="resourceFilter" />
客户端:
<oauth:client id="oauth2ClientContextFilter" />
<oauth:resource id="sso" client-id="admin"
access-token-uri="http://localhost:8080/tough/oauth/token"
user-authorization-uri="http://localhost:8080/tough/oauth/authorize"
use-current-uri="true" client-secret="secret"
client-authentication-scheme="header" type="authorization_code"
scope="trust" />
<oauth:rest-template id="template" resource="sso"/>
如果有人知道哪里出了问题,请告诉我。
答案 0 :(得分:1)
Phew ......我解决了问题。上面的配置存在两个问题。
注意客户端与用户不同。客户端是第三方想要访问属于您的用户的资源(也称为资源所有者)。希望以上帮助
:)干杯
答案 1 :(得分:0)
我遇到了同样的问题。它有助于添加
org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService
弹出证书身份验证管理器,将clientDetailsService粘贴到身份验证管理器。所以
<authentication-manager alias="authenticationManager">
...
<authentication-provider user-service-ref="clientDetailsUserDetailsService"/>
...
</authentication-manager>
几乎为我解决了这个问题。我还有一个问题:由于ClientDetailsUserDetailsService没有默认构造函数,因此spring抛出了表单的异常
org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class
[class org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService]:
Common causes of this problem include using a final class or a non-visible class;
nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
如果不使用接收clientDetailsService作为属性而不是构造函数arg的类的副本,我无法解决。