2013-10-09 81 views
0

我必須根據我們的用戶訪問管理提供程序生成的唯一令牌編寫一個用於驗證用戶的API。用於用戶認證的ASP.net Web API。

我們在php中開發的應用程序使用用戶名和密碼管理用戶身份驗證的過程。在那個php應用程序中,我們有其他.net和java應用程序的鏈接。當鏈接被點擊時,第三方用戶訪問管理被聯繫,這反過來又給出了一個唯一的標記,就像一個guid,它被作爲查詢字符串參數傳遞給.net應用程序。在我們的.net應用程序中,開發的方式在2008年太老了,它使用vb腳本來針對第三方用戶管理應用程序對該唯一令牌進行身份驗證。

我已經做了大量的研究,並試圖編寫一個asp.net MVC4 Web API來擺脫VB腳本並使其可擴展。請讓我知道,如果我的做法是正確的還是應該用什麼來完成以下要求

  • API應該能夠提供任何數量的設置在主機的PHP應用程序的鏈接。
  • 使用此api驗證令牌的其他應用程序將使用java和.net。
  • 我是對的選擇mvc4網頁API來完成相同的
  • 如果是,那麼應該使用何種類型的身份驗證(基本,表單等)
  • 是否有任何示例代碼來看看,因爲我有發現了許多與我的場景無關的例子。

這些java和.net應用程序應該僅基於從php應用程序傳遞的唯一令牌進行身份驗證。

回答

0

從您的要求,似乎Thinktecture's Identity Server將非常適合您的需求。如果您導航到該鏈接,該鏈接將全面說明如何將其用作認證令牌的中心。我非常有信心,這將回答你的問題清單!

+0

我檢查您所提供的鏈接,但它更多的似乎是用於令牌生成的服務。在我的情況下,令牌已經生成並作爲查詢字符串參數傳遞。我的意思是代幣生成是通過我們正在使用的第三方供應商完成的。 – Vidya

+0

我的歉意似乎我可能已經指示你錯誤的鏈接。 [Web Api安全性](https://github.com/thinktecture/Thinktecture.IdentityModel.45/tree/master/Samples/Web%20API%20Security)的這種實現可能是您想到的內容Identity Server可能稍微有些過度你正在尋找什麼。這提供了現成的令牌認證 –

0

您可以使用消息處理程序設置currentprincipal,所以是這樣的:

public class TokenAuthMessageHandler : DelegatingHandler 
{ 
    public TokenAssembler<Token> TokenAssembler { get; set; } 
    const string SSOTOKEN = "token"; 

    protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, 
     CancellationToken cancellationToken) 
    { 
     Token token; 
     IEnumerable<string> headers; 
     if (request.Headers.TryGetValues(SSOTOKEN, out headers)) 
     { 
      token = TokenAssembler.Decrypt(headers.First()); 
     } 
     else 
     { 
      var qs = HttpUtility.ParseQueryString(request.RequestUri.Query); 
      var tokenstr = qs[SSOTOKEN]; 
      if (!string.IsNullOrEmpty(tokenstr)) 
      { 
       token = TokenAssembler.Decrypt(tokenstr); 
      } 
     } 

     if (token != null) 
     { 
      var principal = new GenericPrincipal(new GenericIdentity(Username), null); 
      Thread.CurrentPrincipal = principal; 
      HttpContext.Current.User = principal; 
     } 
     return base.SendAsync(request, cancellationToken) 
      .ContinueWith(task => 
      { 
       var response = task.Result; 

       if (response.StatusCode == HttpStatusCode.Unauthorized 
        && !response.Headers.Contains(BasicAuthResponseHeader)) 
       { 
        // redirect to some log in page? 
       } 
       return response; 
      }); 
    } 

您麪包車註冊消息處理程序在webapiconfig像這樣:

config.MessageHandlers.Add(new TokenAuthMessageHandler() { TokenAssembler = MyTokenAssembler }); 
+0

只是想知道..不知道這是否是一個蹩腳的問題..上面的代碼中的TOkenAssembler類是什麼?我不認爲它是框架和定製類的一部分。 – Vidya

+0

感謝您的回覆。 – Vidya

+0

TokenAssembler是解密/加密您正在使用的令牌的類。 – Rolfvm