簡體   English   中英

在 ASP.NET WebAPI 中檢索不記名令牌

[英]Retrieve bearer token in ASP.NET WebAPI

我有一個啟用了身份驗證的 Web API(承載令牌)。 這是由客戶端應用程序調用的,我想保護它免受匿名使用,因此我想創建一個用戶並為其創建一個不記名令牌。

我可以通過調用registertoken方法來創建令牌,但我想從代碼中做到這一點。

  1. 據我所知,不記名令牌未存儲在數據庫中。 可以使用 ASP.NET Identity API 以某種方式檢索它嗎?

  2. 我還想從代碼創建此用戶並將令牌保存在某處,因為我需要將數據庫部署到多個服務器。

如果您只有一個客戶端會與您的 API 對話,我不建議您采用這種方法,我的理解是您需要發布一個非常長的訪問令牌,可能持續一年,並繼續使用此令牌訪問后端API,對吧? 如果此令牌被盜,您會怎么做? 您無法撤銷訪問令牌,因此它在某種程度上類似於您的主密鑰(密碼)。 我的建議是使用 OAuth 刷新令牌和訪問令牌。 這取決於您的客戶端類型,您可以在此處查看這是如何完成的http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web -api-2-owin/刷新令牌可以被撤銷,它們可以在很長一段時間后過期。 如果您需要更多細節來實現這一點,請告訴我。

創建自定義身份驗證屬性並存儲用戶的令牌哈希。 一個用戶可以擁有多個令牌。 然后你可以讓用戶做他想做的事 - 當密碼更改時注銷所有其他會話或有選擇地刪除會話

  public class CustomAuthAttribute : System.Web.Http.AuthorizeAttribute
    {
        protected override bool IsAuthorized(HttpActionContext context)
        {
            var accessToken = HttpContext.Current.Request.Headers["Authorization"];
            var hash = accessToken.Md5();
            //store the hash for that user 
            //check if the hash is created before the password change or its session was removed by the user
            //store IP address and user agent 
            var isBlackListed = ...
            .....
            return !isBlackListed && base.IsAuthorized(context);

        }
    }

如果您需要在 WebAPI 控制器函數中解碼令牌,我發現這有效:

String token = Request.Headers.Authorization.Parameter;
Microsoft.Owin.Security.AuthenticationTicket t = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM