2017-12-02 5 views
1

Ich habe einen Artikel Dienst erfordert:Wie von einem autorisierten Service zu einem anderen Dienst aufrufen, die Genehmigung

[Authenticate] 
public class ItemService : ServiceStack.Service { 
    //implementation 
} 

Im ItemService ich das Debuggen dieses Verfahren erhalten, die erfolgreich eine gültige Token und ist in der Lage zu schaffen, erhalten hat, Sitzung:

public GetItemResponse Get(GetItem request) 
{ 
    var session = SessionAs<CustomUserSession>(); 
    var authToks1 = session.GetAuthTokens();//empty 
    var authToks2 = session.GetAuthTokens(_authServiceConnection);//null 
    var authService = new JsonServiceClient(_authServiceConnection); 

    //not authorized 
    ConvertSessionToTokenResponse attempt1 = authService.Send(new ConvertSessionToToken()); 
    //not authorized 
    ConvertSessionToTokenResponse attempt2 = authService.Send(new ConvertSessionToToken() { PreserveSession = true }); 

    var accountService = new JsonServiceClient(_accountServiceConnection) 
    { 
     BearerToken = "what to do", 
     RefreshToken = "what to do" 
    }; 

    return new GetItemResponse(); 
} 

Offensichtlich bin ich einfach versuchen, einen anderen Dienst zu rufen, AccountService:

[Authenticate] 
public class AccountService : ServiceStack.Service { 
    //implementation 
} 

So fügen Sie ein JWT Refresh-Token oder JWT-Bearer-Token in eine Anfrage von einem autorisierten Service an einen anderen Service mit dem ServiceStack-Attribut Authenticate ein.

Hinweis: Ich verwende einen benutzerdefinierten Auth-Provider, ich habe eine Legacy-Datenbank.

Antwort

2

Wenn Sie einen anderen ServiceStack-Service mit demselben Host verwenden, sollten Sie Service Gateway verwenden, da interne Anforderungen direkt im Prozess ausgeführt werden, wodurch die Anforderungsfiltervalidierung vermieden wird.

var response = Gateway.Send(new MyRequest()); 

Wenn Sie versuchen, eine Remote-ServiceStack Service rufen Sie das JWT Token mit der Bitte erhalten können mit IRequest.GetJwtToken() Erweiterungsmethode gesendet und an die nachgelagerten Serviceanfragen weiterleiten:

var accountService = new JsonServiceClient(_accountServiceConnection) 
{ 
    BearerToken = Request.GetJwtToken(), 
}; 
+0

jetzt das heißt glatt –

Verwandte Themen