我有一个oauth-server使用' spring-cloud-oauth2'和春天的云安全'该应用程序是一个spring-boot应用程序。我想从一个有角度的2应用程序获取access_token,即我想从angular 2应用程序登录。在我的oauth-server中,我有一个client-id = microservice和client-secret = microservicesecret。 我已经从postman检查了oauth-server,在授权部分,我使用了用户名和密码,我分别使用了client-id和client-secret。在body部分,我使用grant_type = password,client_id = microservice,username = m @ email.com,password = passw0rd,一切都很好。
但是,我在使用角度2应用程序中的配置时遇到了问题。我使用了以下代码片段。
userLogin(){
console.log("In the userLogin()");
var username:string='microservice';
var password:string='microservicesecret';
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('grant_type','password');
headers.append('client_id','microservice');
headers.append('client_secret','microservicesecret');
headers.append('username',this.user.userEmail);
headers.append('password',this.userPassword);
console.log("User");
console.log(this.user);
console.log(headers);
console.log( JSON.stringify({username:username,password:password}));
var data = "username=" + username + "&password=" + password ;
this.http
.post(this.loginUrl,
JSON.stringify({user,password}),
{headers}
)
.map(res=>res.json())
.map((res)=>{
if(res.success){
console.log("Success");
localStorage.setItem('access_token',res.access_token);
console.log("Access token");
console.log(res.access_token);
}
});
}
此处用户插入了userEmail和userPassword。 令牌网址是
loginUrl:string="http://localhost:9000/services/oauth/token";
但是,我得到了401错误。我需要解决方案。
答案 0 :(得分:1)
你试图通过邮递员或类似的东西获得令牌。获取HTTP 401的原因有很多。如果您发布spring auth服务器日志并请求详细信息,那么理解起来会更清楚。
我正在通过Spring Boot Auth Server共享我的登录功能。我使用带有Basic BASE64 Token的Authorization Hedar,而不是使用'client_id'和'client_secrete'。
public login(username: string, password: string): Observable<TokenModel> {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Accept', 'application/json');
headers.append('Authorization', '**Basic BASE64TOKEN!!**');
let options = new RequestOptions({ headers: headers });
let params = new URLSearchParams();
params.append('username', username.valueOf());
params.append('password', password.valueOf());
params.append('scope', this.scope);
params.append('grant_type', this.grant_type);
return this.http.post(this.accessTokenUri, params.toString(), options)
.map(response => { return <TokenModel>response.json(); })
.do(token => {
this.storageService.setStorage('id_token', token.access_token);
})
.catch(error => { return this.handleError(error); });
}