2013-10-26 3 views
1

backbone.js 및 웹 API를 사용하여 응용 프로그램을 빌드하고 있습니다. JS 클라이언트는 api에 액세스하기 위해 ajax 요청을 보냅니다. API를 작성하는 것은 매우 쉽지만 API에 대한 인증 및 권한 부여를 구현하려고합니다.토큰 기반 인증 웹 API

성공적인 인증 후에 토큰을 반환하고이 토큰을 추가 요청에 사용할 계획입니다. 이 토큰은 HTTP Authorization 헤더에 전달됩니다. 내 요구 사항은 다음과 같습니다 1) 각 요청에서 토큰을 확인하고 사용자 ID를 가져옵니다. 2) 추가 작업을 위해 가져온 사용자 ID를 사용하십시오.

첫 번째 비트는 데이터베이스에 대해 영구 토큰을 확인할 수있는 사용자 지정 작업 필터를 사용하여 처리 할 수 ​​있습니다. 하지만 두 번째 비트를 수행하기위한 샘플이나 예제를 찾을 수 없습니다. 전달 된 토큰에서 사용자 아이디를 얻고 나중에 처리하기 위해 아이디를 추가하고 싶습니다. 그것을 수행하는 방법이 있습니까?

제안이나 아이디어를 기다리는 중입니다. 모든 코드 샘플이 도움이 될 것입니다. 미리 감사드립니다.

+0

내 대답은 여기에 있습니다. http://stackoverflow.com/questions/19269543/asp-net-web-api-for-user-authentication/19288696 – Rolfvm

답변

0

OAuth를 사용하는 것이 좋습니다. 어쨌든 토큰과 사용자 정보를 세션에 설정하고 후속 호출에서 사용할 수 있습니다. 즉 세션이 활성화되어 있고 사용자 정보가있는 경우 사용자를 인증하고 인증합니다 (아마도 OAuth를 통해). 세션이 유효한 경우 세션에 저장하여 후속 호출에 사용할 수 있습니다.

+6

OAuth를 사용해야하는 이유는 무엇이며 어떻게 관련이 있습니까? 이 질문에? 더 이상 아무 이유없이 그 이름을 그냥 떨어 뜨리는 것은 정말로 도움이되지 않습니다. –

1

이 같은 성공 토큰 검증에 Thread.CurrentPrincipal을 설정할 수 있습니다 (자신의 사용자 ID가 연결이 가능하도록하기 위해)

IPrincipal principal = new GenericPrincipal(new GenericIdentity(username), null); 

Thread.CurrentPrincipal = principal; 
// if we're running in IIS... 
if (HttpContext.Current != null) 
    HttpContext.Current.User = principal; 

교장은 또한 System.Security.Principal.IPrincipal 인터페이스를 구현하는 사용자 정의 클래스의 인스턴스 수 있습니다 .

또한 메시지 수명주기 동안 가능한 한 빨리 현재 주체를 설정하기 위해 토큰 확인을위한 동작 필터 대신 DelegatingHandler을 사용하는 것이 좋습니다. 또한이 방법으로 모든 작업 메서드/컨트롤러를 작업 필터 특성으로 꾸밀 필요가 없습니다.

+0

: 감사합니다 ... 나는 이것을 http : //stackoverflow.com/questions/1064271/asp-net-mvc-set-custom-iidentity-or-iprincipal ....에서 시도 할 것입니다. – prashant