0

У меня есть oauth-сервер, защищенный с помощью «spring-cloud-oauth2» и «spring-cloud-security», а приложение - приложение с пружинной загрузкой. Я пытаюсь получить access_token из углового 2 приложения, то есть я хочу войти в систему с углового 2 приложения. В моем oauth-сервере у меня есть клиент-id = микросервис и клиент-секрет = микросервис. Я проверил oauth-сервер от почтальона, где в разделе авторизации для имени пользователя и пароля я использую идентификатор клиента и клиентский секрет соответственно. И в разделе body я использую grant_type = password, client_id = microservice, [email protected], password = passw0rd, и все работает отлично.Как подключить угловое приложение 2 с сервером spring-oauth2?

Но у меня возникли проблемы с использованием конфигурации в угловом приложении 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); 
     } 
     }); 
    } 

Здесь пользовательEmail и userPassword добавляются пользователем. Маркер URL является

loginUrl:string="http://localhost:9000/services/oauth/token"; 

Но я gettng 401 ошибку. Мне нужно решение.

ответ

1

Вы пытались получить токен через Почтальон или что-то подобное. Есть много причин, чтобы получить HTTP 401. Если вы опубликуете весенний журнал сервера авторизации и детали запроса, было бы понятнее понять.

Я делюсь своей функцией входа в систему, используя Spring Boot Auth Server. Я использую Authorization Hedar с Basic BASE64 Token вместо использования «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); }); 

}

Смежные вопросы