2015-01-27 2 views
1

ServiceStack 기반 웹 서비스 응용 프로그램에서 이미 사용자 정의 인증 공급자를 사용하고 있습니다.다중 점유를위한 ServiceStack의 사용자 정의 인증 요청

Authenticate 메서드를 재정의하고 여러 백엔드 테넌트 데이터베이스 중 하나에 대해 내 사용자의 유효성을 검사합니다. 현재 API 키를 데이터베이스 문자열과 비교하여 테넌트 데이터베이스를 결정합니다.

public override object Authenticate(
    IServiceBase authService, 
    IAuthSession session, 
    Auth request) // <- custom object here, MyCustomAuth request 
{ 
    // ... 
} 

각 응용 프로그램은 하나의 세입자 (임차인/고객이 자신의 응용 프로그램을 구축하고 API 키를 사용할 수 있습니다)입니다 때 작동합니다. 앞으로 나는 멀티 테넌트 모바일 애플리케이션을 만들고 싶습니다. 따라서 각 사용자가 입력 할 것으로 예상 할 수 없기 때문에 API 키 방법을 사용할 수 없으므로 어느 테넌트가 응용 프로그램을 사용하고 있는지 확인할 수 없습니다.

로그인 할 때 사용자가 제공 한 TenantId를 포함 할 수 있도록 Auth 개체를 변경하려고합니다. 그러나, 어떻게 그 개체를 사용자 정의 할 수 있는지 볼 수 없습니다.

어쨌든 Auth 객체를 사용자 정의 할 수 있습니까? 아니면 대체 솔루션을 찾아야합니까?

또는
client.Post(new Authenticate { 
    ... 
    Meta = new Dictionary<string,string> { 
     {"TenantId", tenantId}, 
    } 
} 

당신이 추가 정보를 보낼 수 있습니다 : 예

답변

2

당신은 내장 Authenticate 요청 DTO 사용 수정할 수 없습니다,하지만 당신은 인증합니다 요청과 함께 추가 메타 데이터를 전송하기 위해 Dictionary<string, string> Meta 속성을 사용할 수 있습니다 QueryString 또는 HTTP 헤더를 사용하고 IRequest에 액세스하려면 다음을 입력하십시오.

var tenantId = authService.Request.QueryString["TenantId"]; 
+0

'Meta' 속성은 v3.9.x 이후 버전입니까? 또한 동일한 3.9.x 버전 (.48)의 경우 authService.RequestContext.Get ()를 수행해야한다고 가정합니다. Items [ "TenantId"]'? – Junto

+0

@Junto Authenticate.Meta가 v4에 추가되었습니다. 그것은 v3에서 현재 요청에 액세스하는 방법이지만, QueryString을 찾으려면 여전히 찾고 싶을 것입니다. – mythz

+0

감사합니다. :) – Junto