2015-08-23 43 views
1

我在我的SignalR項目中製作了BasicAuth和WindowsAuth。 現在我正在尋找其他驗證方式(無需Win/AD帳戶)。通過連接頭中的AuthToken進行SignalR身份驗證

在閱讀SignalR文檔我偶然發現的可能性,以提供連接頭身份驗證令牌: http://www.asp.net/signalr/overview/security/hub-authorization#header

它指出「然後,在中心,你會驗證用戶的令牌。」 我可以使OnConnected方法是匿名訪問的並且獲得令牌就像下面,然後驗證它:

var test = Context.Request.Headers["mytoken"]; 

但是你會是下一個步驟?我需要將連接的用戶設置爲通過身份驗證的用戶,但我該如何手動執行該操作?

我的總體目標是要有一個非常簡單的認證方法,在服務器端驗證的「硬編碼」令牌,並授權訪問啓用授權的其他方法。

任何幫助,將不勝感激。

回答

0

我有過類似的問題。我找到了一種解決方法來創建一個新的AuthorizeAttribute。接下來,我用這個屬性來裝飾方法。當發出請求時,屬性會檢查令牌並給予權限或不被訪問。 下面是代碼:

[AttributeUsage(AttributeTargets.Method)] 
internal class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override bool AuthorizeHubMethodInvocation(Microsoft.AspNet.SignalR.Hubs.IHubIncomingInvokerContext hubIncomingInvokerContext, bool appliesToMethod) 
    { 
     string token = hubIncomingInvokerContext.Hub.Context.Headers["AuthenticationToken"]; 

     if (string.IsNullOrEmpty(token)) 
      return false; 
     else 
     { 
      string decryptedValue = Encryptor.Decrypt(token, Encryptor.Password); 

      string[] values = decryptedValue.Split(';'); 

      string userName = values[0], 
       deviceId = values[1], 
       connectionId = values[2]; 

      bool b = ...CanAccess()...; 

      return b; 
     } 
    } 
} 

爲了有一個用戶名,你可以簡單地在你的集線器,它讀取標記,分析它,並返回該用戶名添加屬性。 儘管如此,仍然無法使用Context.User.Identity。我希望它有幫助。

相關問題