2016-12-04 3 views
1

방금 ​​작성한 새로운 Rest API 플랫폼에 stormpath-default-spring-boot-startter (1.2.0) 라이브러리를 사용하기 시작했습니다. 후속 API 호출이 쿠키에 의해 인증 될 수 있도록 사용자를 인증 할 때 다음 코드에 의해 액세스 쿠키가 생성 될 것으로 예상했습니다. 계정은 인증되지만 쿠키는 생성되지 않습니다.StormPath 스프링 부트 인증 쿠키 생성

AuthenticationRequest request = UsernamePasswordRequests.builder() 
.setUsernameOrEmail(userId) 
.setPassword(pwd) 
.withResponseOptions(UsernamePasswordRequests.options().withAccount()) 
.build(); 
Account account = null; 

try { 
account = app.authenticateAccount(request).getAccount(); 
} 
catch (ResourceException ex) { 
throw(ex); 
} 

Following here is the property file entries, 

stormpath.spring.security.enabled = false 
security.basic.enabled = false 

Help is much appreciated. 

답변

4

여기서는 컨텍스트를 혼합 할 수 있습니다.

제공된 코드는 Java SDK를 직접 사용하고 Stormpath Spring Boot 통합과 같은 통합을 사용하지 않을 때 필요한 수동 코드 유형과 같습니다.

Stormpath Default Spring Boot Starter를 사용할 때 자동으로 인증을 받고 쿠키를 설정할 수있는 끝 점이 있습니다.

예를 들어 /login 엔드 포인트가 있습니다. 당신은 이런 식으로 뭔가 보이는 로그인 모델을 다시 얻을 것이다

curl localhost:8080/login

: 당신이 당신의 예제 응용 프로그램을 불 경우

것은, 당신은에 갈 수 있어야한다

{ 
    "form": { 
     "fields": [ 
      { 
       "name": "login", 
       "label": "Username or Email", 
       "placeholder": "Username or Email", 
       "required": true, 
       "type": "text" 
      }, 
      { 
       "name": "password", 
       "label": "Password", 
       "placeholder": "Password", 
       "required": true, 
       "type": "password" 
      } 
     ] 
    } 
} 

을 당신 POST를 사용하여 인증 할 수 있습니다.

curl -v -H "Content-Type: application/json" -X POST \ 
-d '{"login": "<email>", "password": "<password>"}' \ 
http://localhost:8080/login 

이 같은 응답 : 응답에 포함 된

> POST /login HTTP/1.1 
> Host: localhost:8080 
< HTTP/1.1 200 
< Set-Cookie: access_token=eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ...;Max-Age=3600;path=/;HttpOnly 
< Set-Cookie: refresh_token=eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoicmVmcmVzaCIsImFsZyI6IkhTMjU2In0...;Max-Age=5184000;path=/;HttpOnly 
< Content-Type: application/json 
< Transfer-Encoding: chunked 
< Date: Mon, 05 Dec 2016 05:30:25 GMT 
< 
* Connection #0 to host localhost left intact 
{ 
    "account": { 
     "href": "https://api.stormpath.com/v1/accounts/<account id>", 
     "createdAt": "2016-03-04T06:29:48.506Z", 
     "modifiedAt": "2016-08-17T18:01:07.812Z", 
     "username": "<username>", 
     "email": "<email>", 
     "givenName": "<givenName>", 
     "middleName": null, 
     "surname": "<surname>", 
     "status": "ENABLED", 
     "fullName": "<full name>", 
     "emailVerificationStatus": null, 
     "passwordModifiedAt": "2016-05-24T02:14:01.000Z" 
    } 
} 

모두 access_tokenrefresh_token 쿠키뿐만 아니라 계정 정보가 포함 된 JSON 응답. 당신은 OAuth2를 사용하려는 경우

, 당신은 지원하는 /oauth/token 엔드 포인트를 모두 grant_type=passwordgrant_type=client_credentials 흐름 :

> POST /oauth/token HTTP/1.1 
> Host: localhost:8080 
< HTTP/1.1 200 
< Set-Cookie: access_token=eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ...;Max-Age=3600;path=/;HttpOnly 
< Set-Cookie: refresh_token=eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoicmVmcmVzaCIsImFsZyI6IkhTMjU2In0...;Max-Age=5184000;path=/;HttpOnly 
< Cache-Control: no-store, no-cache 
< Pragma: no-cache 
< Content-Type: application/json;charset=ISO-8859-1 
< Content-Length: 933 
< Date: Mon, 05 Dec 2016 05:38:53 GMT 
< 
* Connection #0 to host localhost left intact 
{ 
    "access_token": "eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoiYWNjZXNzIiwiYWxnIjoiSFMyNTYifQ...", 
    "refresh_token": "eyJraWQiOiJSOTJTQkhKQzFVNERBSU1HUTNNSE9HVk1YIiwic3R0IjoicmVmcmVzaCIsImFsZyI6IkhTMjU2In0...", 
    "token_type": "Bearer", 
    "expires_in": 3600 
} 

I 희망 : 당신은 같은 응답을 얻을 것이다

curl -v -X POST \ 
-d grant_type=password -d username=<email> -d password=<password> \ 
http://localhost:8080/oauth/token 

이게 도움이됩니다!

전체 공개 : 저는 Stormpath의 Java 개발자 전도자 중 하나입니다.

+0

우수합니다. 감사! – Faizal

+0

위대한! 위의 대답을 수락하십시오. 감사. – afitnerd

+0

이 StormPath 기본 설정에서 CORS를 활성화하는 데 관한 모든 설명서도 함께 제공 할 수 있습니까? 감사! – Faizal