0

我正在使用cors和asp.net成員來管理API的安全性。但是,在某些情況下,服務器可能需要代表客戶向我們的API說話。就像API背後的UI mvc項目代碼一樣。創建原則/ httpcontextbase.User來自用戶ID

由於服務器,未經授權的客戶端會進行此調用,所以asp.net cookie不會被喚醒或拾取。

我重載AuthorizeCore爲了檢查,看看是否有一個令牌:

if(httpContext.Request.Headers["x-access-token"] != null) 
     { 
      // this authorization is from token, rather than cookie 
      var accessToken = httpContext.Request.Headers["x-access-token"]; 
      var security = new Security(); 
      var decrypted = JsonConvert.DeserializeObject<TokenModel>(security.Decrypt(accessToken)); 

      var clientip = GetClientIp(httpContext.Request); 

      if(httpContext.Request.Headers["x-client-ip"] == null) 
      { 
       return false; 
      } 

      if (httpContext.Request.Headers["x-client-ip"] != decrypted.Ip) 
      { 
       return false; 
      } 

      if (!IsSecretValid(decrypted)) 
      { 
       return false; 
      } 


      MembershipUser u = Membership.GetUser(decrypted.UserId); 

     } 

我所問的是,如何轉換的會員爲宗旨,以然後讓剩下的的角色等工作的代碼。

IPrincipal user = httpContext.User; 

if (!user.Identity.IsAuthenticated) 
     { 
      return false; 
     } 

     if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) 
     { 
      return false; 
     } 

     if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) 
     { 
      return false; 
     } 

這是甚至可能的,如果是的話如何。

回答

0

對不起,發現經過深思道:

httpContext.User = new GenericPrincipal(new GenericIdentity(u.UserName), System.Web.Security.Roles.GetRolesForUser(u.UserName)); 

這應該然後啓用我的控制器行動,如果需要拿起用戶ID等。