2017-08-10 1 views
2

zuzugreifen Ich habe Oauth mit meiner WebAPI 2-Anwendung implementiert, und mehrere Anwendungen greifen auf die API zu. Nach der Authentifizierung nach einer Anforderung über das Auth-Token während senden, kann ich den Benutzer zugreifen, wie folgt:Ist es möglich, auf die Client-ID von einem AuthToken (RequestContext) in WebAPI 2

var currentUser = RequestContext.Principal; 

bei der Anmeldung die clientId wurde wie folgt eingestellt:

context.OwinContext.Set<AppClient>("oauth:client", client); 

Gibt es eine Möglichkeit, auf diese Client-ID zuzugreifen? Ich möchte bestimmte Aktionen/Controller auf bestimmte Clients beschränken. Gibt es eine Möglichkeit, dies zu tun?

Ich habe versucht, den Client immer wie folgt:

var client = Request.GetOwinContext().Get<string>("oauth:client"); 

aber das funktioniert nicht.

Antwort

2

Beim Einloggen Sie einen Anspruch auf der Identität der zur Verfügung ist es GrantResourceOwnerCredentials

identity.AddClaim(new Claim("oauth:client", client)); 

auf diese Weise einstellen, sobald der Identität gesetzt wird die User Principal.

Sie können eine Erweiterungsmethode schaffen es bequem

public static class GenericIdentityExtensions { 
    const string ClientIdentifier = "oauth:client"; 

    /// <summary> 
    /// Set the client id claim 
    /// </summary> 
    /// <param name="identity"></param> 
    /// <returns></returns> 
    public static bool SetClientId(this IIdentity identity, string clientId) { 
     if (identity != null) { 
      var claimsIdentity = identity as ClaimsIdentity; 
      if (claimsIdentity != null) { 
       claimsIdentity.AddClaim(new Claim(ClientIdentifier, clientId)); 
       return true; 
      } 
     } 
     return false; 
    }   

    /// <summary> 
    /// Return the client id claim 
    /// </summary> 
    /// <param name="identity"></param> 
    /// <returns></returns> 
    public static string GetClientId(this IIdentity identity) { 
     if (identity != null) { 
      var claimsIdentity = identity as ClaimsIdentity; 
      if (claimsIdentity != null) { 
       return claimsIdentity.FindFirstOrEmpty(ClientIdentifier); 
      } 
     } 
     return string.Empty; 
    } 
    /// <summary> 
    /// Retrieves the first claim that is matched by the specified type if it exists, String.Empty otherwise. 
    /// </summary> 
    public static string FindFirstOrEmpty(this ClaimsIdentity identity, string claimType) { 
     var claim = identity.FindFirst(claimType); 
     return claim == null ? string.Empty : claim.Value; 
    } 
} 

So nun zu extrahieren, wenn Sie die den Benutzerprinzipal haben Sie die Client-ID aus den Ansprüchen extrahieren kann.

var currentUser = RequestContext.Principal; 
var client = currentUser.Identity.GetClientId(); 
Verwandte Themen