2017-03-13 4 views
2

Wir bewerten Service Stack v.4.5.6.0 für eine Web-API und möchten, dass Clients sich mit grundlegenden Authentifizierungs- oder Berechtigungsnachweisen authentifizieren können. Wir möchten jedoch nicht, dass sie einen Basis-Auth-Header anstelle von a bereitstellen können JWT-Token oder Session-Cookie bei Nutzung unserer Dienste. Während ich weiß, dass dies etwas willkürlich ist, gibt es eine Möglichkeit, Routen von bestimmten Anbietern auszuschließen oder die Verwendung eines Token/Cookie zu authentifizieren, nachdem sie sich eingeloggt haben?Ist es möglich, Authentifizierungsanbieter für bestimmte Routen zu deaktivieren?

Auth config AppHost:

private void ConfigureAuth(Container container) 
{ 
    var appSettings = new AppSettings();    
    this.Plugins.Add(new AuthFeature(() => new CustomAuthUserSession(), 
     new IAuthProvider[] 
      { 
       new CredentialsAuthProvider(), 
       new BasicAuthProvider(), 
       new JwtAuthProvider(appSettings) 
      }) { IncludeAssignRoleServices = false, MaxLoginAttempts = 10}); 

    var userRepository = new CustomUserAuthRepository(container.TryResolve<IDbConnectionFactory>()); 
    container.Register<IAuthRepository>(userRepository); 

} 
+0

FYI sehen aktualisierte Antwort auf neue 'session.AuthProvider' Eigenschaft, die enthält, welcher AuthProvider verwendet wurde, um den Benutzer zu authentifizieren. – mythz

+0

Danke! Der FromTokenCookie funktioniert gut für das, was ich brauchte. – liz

Antwort

1

ServiceStack können Sie entscheiden, welche AuthProviders Sie Ihre Leistungen wollen mit authentifiziert werden, aber es lässt nicht einzeln Sie konfigurieren, welche adhoc AuthProviders gilt für einzelne Leistungen. Fühlen Sie sich frei zu add this a feature request.

Allerdings, wenn Sie sicherstellen wollen, dass ein Dienst nur über JWT zugegriffen wird Ihnen einen Scheck in Ihre Dienste für FromToken hinzufügen können, die die Session zeigt ein JWT Token bevölkert wurde, zum Beispiel:

[Authenticate] 
public class MyServices : Service 
{ 
    public object Any(MyRequest request) 
    { 
     var session = base.SessionAs<AuthUserSession>(); 
     if (!session.FromToken) 
      throw HttpError.Unauthorized("Requires JWT Authentication"); 

     //... 
    } 
} 

Von v4 .5.7 das ist jetzt available on MyGet Sie auch die neue session.AuthProvider Eigenschaft verwenden kann, das, was AuthProvider anzeigt wurde verwendet, um den Benutzer zu authentifizieren, zB:

public object Any(MyRequest request) 
{ 
    var session = base.SessionAs<AuthUserSession>(); 
    if (session.AuthProvider != JwtAuthProvider.Name) 
     throw HttpError.Unauthorized("Requires JWT Authentication"); 

    //... 
} 

auf die docs siehe für different AuthProvider names for each AuthProvider.

Verwandte Themen