如何将angular 2应用程序与spring-oauth2服务器连接?

时间:2017-02-20 14:30:13

标签: angular spring-cloud spring-oauth2 spring-cloud-security

我有一个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错误。我需要解决方案。

1 个答案:

答案 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); });

}