2014-03-18 1 views
3

나는 토큰 기반 인증을하고있어, 나는 내가 내 길에 authenticate 지시어를 사용하기로하고 방법을 모른다 :인증 지시문을 사용하여 토큰 기반 인증을 실행하는 방법은 무엇입니까?

나는 헤더에서 access_token납니다.

post { 
    headerValueByName("Access_Token") { 
    access_token => { 
     authenticate(??????){ 
     user => { 
      ...... 
      ...... 
     } 
     } 
    } 
    } 
} 

인증 방법은 무엇입니까?

+0

http://tools.ietf.org/html/rfc6749 라이브러리를 사용하거나 작업을 함께 전달하면 OAuth2 서버를 만드는 것이 쉬운 일은 아닙니다. – flavian

답변

8

몇 가지 방법이 있습니다. 플라 비안과 같은 일부 라이브러리에서이를 수행하거나 직접 할 수 있습니다. 인증 지시문이 그리 많지는 않지만, 스프레이와 함께 제공되는 표준 인증 메커니즘을 "실행"하기 만하면 here에 대해 읽을 수 있습니다. 이것이 원하는 것이 아니거나이를 수행하는 방법을 이해하지 못했다면 여기에 작은 예제가 있습니다.

토큰 인증과 함께 가장 쉬운 경우를 생각해 봅시다. 토큰은 일부 저장소에 저장되고 비교할 사용자를 인증하기 위해 사용됩니다. 그것은을 가지고 원인, 당신은 authenticate 지침을 살펴 경우 Authentication[User]Either[Rejection, T]

입니다

def validate(token: AuthToken): Future[Authentication[User]] = { 
    torage.findUserByToken(token) match { 
    case Some(user) => Right(user) 
    case None => Left(AuthenticationFailedRejection(..)) 
    } 
} 

는, 그것이 Magnet pattern 구현 및 AuthMagnet 필요로하고 당신이 그것을 얻기 위해 모든 것을 가지고있다 : 그래서 우리는이 기능이 변환 :

implicit def fromFutureAuth[T](auth: ⇒ Future[Authentication[T]])(implicit executor: ExecutionContext): AuthMagnet[T] = 
    new AuthMagnet(onSuccess(auth)) 

그래서 지금 당신은 그것을 사용할 수 있습니다

post { 
    headerValueByName("Access_Token") { access_token => { 
    authenticate(validate(access_token)) { user => { 
     ...... 
     ...... 
    } 
    } 
} 

사용자 계정을 안전하게 저장할 수있는 &을 찾으려면 stormpath을 확인하십시오. 스프레이 API와 통합하기가 쉽습니다.

+0

스프레이가 분명히 빠른 속도로 바뀌고 있으므로 어쩌면 위의 내용이 더 이상 최신 것이 아니거나 잘못하고있는 것일 수 있습니다 (나는 스프레이가 처음입니다). 그래서 나에게 지금 당장 가능한 것은 (스프레이 1.3.1) : 나는 실제로'AuthMagnet.fromFutureAuth (f)'를 호출한다. 여기서 f는'Future [Authentcation [User]]를 반환한다. 그 길로가는 것이면 여기에있는 것을 좋아할 것입니다. – mkro

관련 문제