Grails oauth插件在请求令牌(/oauth/Token)时未设置身份验证头
我在使用时不断收到错误 {“error”:“unauthorized”,“error_description”:“访问此资源需要完全身份验证”} 发现发出令牌请求时未设置身份验证标头 我的配置如下所示Grails oauth插件在请求令牌(/oauth/Token)时未设置身份验证头,grails,oauth,spring-security,grails-plugin,scribe,Grails,Oauth,Spring Security,Grails Plugin,Scribe,我在使用时不断收到错误 {“error”:“unauthorized”,“error_description”:“访问此资源需要完全身份验证”} 发现发出令牌请求时未设置身份验证标头 我的配置如下所示 oauth { providers { passport { api = com.company.package.security.passport.api.PassportApi key = 'myproject' secret = 'secret' authorizatio
oauth {
providers {
passport {
api = com.company.package.security.passport.api.PassportApi
key = 'myproject'
secret = 'secret'
authorizationUrl = "http://${providerURL}/oauth/authorize"
tokenEndpointUrl = "http://${providerURL}/oauth/token"
callback = "http://{applicationContextPath}/project/oauth/passport/callback"
successUri = '/login/passportSuccess'
failureUri = '/login/passportFailure'
signatureType = org.scribe.model.SignatureType.Header
scope = 'profile'
}
}
debug = true
connectTimeout = 5000
receiveTimeout = 5000
}
我正在使用自定义providerapi,如下所示
public class PassportApi extends DefaultApi20{
private static final String AUTHORIZE_URL_WITH_STATE = "%s? client_id=%s&client_secret=%s&redirect_uri=%s&state=%s&response_type=code&grant_type=authorization_code";
private static final String SCOPED_AUTHORIZE_URL_WITH_STATE = AUTHORIZE_URL_WITH_STATE + "&scope=%s";
@Override
public String getAccessTokenEndpoint() {
Properties appConfig = Holders.getConfig().toProperties();
String tokenEndpointUrl = appConfig.getProperty("oauth.providers.passport.tokenEndpointUrl") + "";
if(tokenEndpointUrl != null){
return tokenEndpointUrl;
}else{
throw new RuntimeException("Passport API Token URL not Configured Please check config property: oauth.providers.passport.tokenEndpointUrl");
}
}
@Override
public String getAuthorizationUrl(OAuthConfig passportOAuthConfig) {
Properties appConfig = Holders.getConfig().toProperties();
String authorizationUrl = appConfig.getProperty("oauth.providers.passport.authorizationUrl");
if(authorizationUrl != null){
if(passportOAuthConfig.hasScope()){
return String.format(SCOPED_AUTHORIZE_URL_WITH_STATE, authorizationUrl, passportOAuthConfig.getApiKey(), passportOAuthConfig.getApiSecret(),
OAuthEncoder.encode(passportOAuthConfig.getCallback()),OAuthEncoder.encode("Yithe"),passportOAuthConfig.getScope());
}else{
return String.format(AUTHORIZE_URL_WITH_STATE,authorizationUrl, passportOAuthConfig.getApiKey(),
OAuthEncoder.encode(passportOAuthConfig.getCallback()), OAuthEncoder.encode("Yithe"));
}
}else{
throw new RuntimeException("Passport API Authorization URL not Configured Please check config property: oauth.providers.passport.authorizationUrl");
}
}
}
另外,发出第二个/oauth/token请求的正确方法是什么,因为如果我使用一个正常的POST设置授权头:Basic client\u id:client\u secret(使用base 64编码),它可以工作,请参见以下内容