0

전자 기반 데스크톱 응용 프로그램 용 NodeJS API 시스템을 만들려고합니다. 앱에서 사용자 이름과 비밀번호를 사용하여 기본 로그인을 허용해야하며, 사용자가 로그인하면 모든 후속 API 호출이 ID와 비밀 키를 통해 인증됩니다. 나는 this guide on using express-strompath description here을 참조하고있다. 이런 사용자 이름/비밀번호 인증을 수행 할 수 없습니다. 기본 사용자 이름 : 암호 인증으로 Stormpath-express 로그인이 작동하지 않습니다.

curl -L -H "Content-Type: application/json" -X POST -d '{"password":"Som3Pa55Word", "username":"[email protected]"}' http://ec2-54-88-168-7.compute-1.amazonaws.com:8000/api/v1.0/login 

아니면 사용자 API 키, 내가 로그인 할 수 있어요 그러나 자바 스크립트

function Login() { 
 
     ... 
 
     var user = { 
 
     username: '[email protected]', 
 
     password: 'Som3Pa55Word ', 
 
     } 
 
     var req = { 
 
     method: 'POST', 
 
     url: apiBaseUrl + '/login', 
 
     headers: { 
 
      'Content-Type': 'application/json' 
 
     }, 
 
     data: user 
 
     } 
 
     return $http(req).then(handleSuccess, handleError); 
 
    }

를 통해

.

curl -L -H "Content-Type: application/json" -X POST --user ABCDEFGHIJKLMNOPQRSTUVWXYZ:AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz -d '{}' http://ec2-54-88-168-7.compute-1.amazonaws.com:8000/api/v1.0/login 

또는 자바 스크립트

를 통해

 var url = apiBaseUrl + '/login'; 
 
     var sp_api_key_id = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
 
     var sp_api_key_secret ='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'; 
 

 
     get the Resource object w/ custom "get" method 
 
     $resource(url, {}, { 
 
     get: { 
 
      method: 'GET', 
 
      headers: { 
 
      Authorization: 'Basic ' + 
 
       $base64.encode(sp_api_key_id + ':' + sp_api_key_secret) 
 
      } 
 
     } 
 
     }).get().then(function(result) { 
 
     console.log("Loging Success") 
 
     });

는 분명히 사용자가 인증을위한 형태로 자신의 API 키를 입력해야하는 불편. stormpath-express가 API ID/비밀 조합을 허용하지만 사용자 이름/비밀번호를 허용하지 않는 이유가 궁금합니다. 여기

내 nodejs 서버

router.post('/login', stormpath.loginRequired, function (req, res, next) { 
 
    /* 
 
    * If we get here, the user is logged in. Otherwise, they 
 
    * were redirected to the login page 
 
    */ 
 
    var respnse = { 
 
     message: 'If you can see this page, you must be logged into your account!' 
 
    } 
 
    res.json(respnse); 
 
    res.status(200); 
 
    });

그리고 Stormpath 설정 코드 나에서 일

// Config 
 
app.use(stormpath.init(app, { 
 
    // TODO 
 
    // apiKeyFile: './app/config/stormpath_apikey.properties', 
 
    application: 'https://api.stormpath.com/v1/applications/ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
 
    secretKey: settings.stormpath_secret_key, 
 
    web: { 
 
    login: { 
 
     enabled: false 
 
    }, 
 
    register: { 
 
     uri: '/user/register' 
 
    }, 
 
    preLoginHandler: function (formData, req, res, next) { 
 
     console.log('Got login request', formData); 
 
     next(); 
 
    } 
 
    }, 
 

 
    postLoginHandler: function (account, req, res, next) { 
 
    console.log('User:', account.email, 'just logged in!'); 
 
    next(); 
 
    } 
 
}));

답변

0

코드입니다 Stormpath. 계정에 API 키가 발급되는 API 키 인증 기능은 웹 브라우저 클라이언트가 아닌 서버 간 클라이언트에 사용됩니다. 따라서 API 키는 HTTP 기본 인증과 함께 사용되거나 OAuth2 액세스 토큰과 교환되도록 사용됩니다.

http://docs.stormpath.com/nodejs/express/latest/authentication.html#http-basic-authentication

http://docs.stormpath.com/nodejs/express/latest/authentication.html#oauth2-client-credentials

웹 브라우저 클라이언트가 /login 엔드 포인트를 사용하기위한 것입니다, 그들은 우리가이 저장 (AN으로 OAuth2 액세스를 수신 및 응답 토큰 새로 고침 : 그 전략은 모두이 문서에 설명되어 있습니다 보안 쿠키 있음). 이것은 급행 폭풍의 특별한 뉘앙스입니다. 당신은 OAuth를/토큰 엔드 포인트를 사용하여 적절한 OAuth2를 암호 교환을 할 수있는, 그 또한 여기에 설명되어 있습니다 :

http://docs.stormpath.com/nodejs/express/latest/authentication.html#oauth2-password-grant

나는이 답변이 도움이되기를 바랍니다!

+0

function Login(user) { var apiBaseUrl = "https://api.stormpath.com/v1/applications/ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sp_api_id = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var sp_api_secret = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz' var req = { method: 'POST', url: apiBaseUrl + '/oauth/token', headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: 'Basic ' + $base64.encode(sp_api_id + ':' + sp_api_secret) }, data: 'grant_type=password&username=' + user.email + '&password=' + user.password } return $http(req).then(handleSuccess, handleError); }
나는 될 수있는 다음과 같은 링크를 볼 수있는이 인증을 수행하는 방법의 예를 제공하기 때문에 http://docs.stormpath.com/guides/token-management/ 가장 유용 여러 가지 방법. –

0

angularJS 기반의 웹 기반 클라이언트의 경우/login 끝점을 사용하고 브라우저가 보내는 쿠키를 관리하고/oauth/token 끝점을 사용하여 액세스를 받고 토큰을 새로 고칠 수 있습니다. The oauth2 method is described in detail herehere. oauth2 메소드는 액세스 토큰에 대해 API 키를 한 번만 교환 할 수 있습니다.이 액세스 토큰은 시간 제한이 있으므로 주기적으로 새로 고쳐야합니다.