Проблемы с аутентификацией Ember oauth2

#ember.js #oauth #oauth-2.0

#ember.js #oauth #oauth-2.0

Вопрос:

Получите сообщение [error =»неавторизованный», error_description =»Для доступа к этому ресурсу требуется полная аутентификация»] при попытке подключить приложение ember к службе аутентификации oauth2. Любые предложения будут с благодарностью приняты. Я потратил пару дней, пытаясь исправить это, но безрезультатно.

вот код в app.js

 
         Ember.Application.initializer({
      name: 'authentication',
      initialize: function(container, application) {
         Ember.SimpleAuth.Authenticators.OAuth2.reopen({
                     makeRequest: function(credentials) {
                         credentials.client_id= 'rsweb-client';
                         credentials.client_secret= '123456';
                         credentials.scope='read';
                  return Ember.$.ajax({
                          type: "POST",
                          url: 'http://127.0.0.1:8080/api/oauth/token',
                          async: false,
                          data:credentials,
                          success: function (data, textStatus, xhr){
                              Ember.run(function(){
                                  resolve({username: data['pl-usr-nickname']});
                              });
                          },
                          error: function (xhr, status, error){
                              Ember.run(function(){
                                  console.log(xhr.responseText);
                              });
                         }
                      });
                    }
                 });
          Ember.SimpleAuth.setup(container, application, { // @todo at version 0.1.2 of Ember-simple-auth, add container
              crossOriginWhitelist: ['http://127.0.0.1:8080'], // @todo remove when live
              // store: Ember.SimpleAuth.Stores.LocalStorage,
              authenticationRoute: 'login'
          });
      }
      }); 
Here is the # The OAuth-secured REST Endpoint
This uses the simple OAuth Resource Owner Password flow.
Here is an example of how to acquired an access_token, and then use that access_token to update an application.
```
curl --noproxy localhost -X POST -vu rsweb-client:123456 http://127.0.0.1:8080/api/oauth/token -H "Accept: application/json" -d "password=passwordamp;username=useramp;grant_type=passwordamp;scope=readamp;client_secret=123456amp;client_id=rsweb-client"

This returns an token when i access from the command line tool.
But not from the ember app.

Here is the request payload:

Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Accept          */*
Parameters          application/x-www-form-urlencoded
client_id           rsweb-client
client_secret   123456
grant_type          password
password            password
scope   read
username    user 
 

Ответ №1:

Похоже, что ваш сервер аутентификации ожидает, что client_id и client_secret будут использоваться в качестве базовых учетных данных аутентификации HTTP, в то время как ваш аутентификатор отправляет их в полезной нагрузке. Вам нужно будет добавить Authorization заголовок в makeRequest метод, как определено, например, здесь: https://www.rfc-editor.org/rfc/rfc2617 который был бы кодировкой base64 для «rsweb-client: 123456».