簡體   English   中英

在[授權]屬性期間檢查“白名單”表(ASP.Net MVC5 Web API JWT)

[英]Checking 'Whitelist' Table during [Authorize] Attribute (ASP.Net MVC5 Web API JWT)

我遵循本文以獲取從.Net Web API發布的JWT,網址為http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server /

TL; DR

如何在Authorize屬性中添加其他邏輯,以針對JWT(也許是JwtBearerAuthenticationOptions)中的特定聲明檢查數據庫表?

較長的版本...

對於生成JWT並在對包含Authorization標頭的控制器發出請求時進行驗證,它也可以正常工作...

基本上,本文不涉及的是撤銷...

經過大量的搜索之后,我發現有幾種使用JWT處理撤銷的方法。

我選擇了“白名單”路由,因此創建了一個表來存儲UserId,ClientId(受眾群體)和包含JTI值(GUID)的列。

基本上,我想向[Authorize]屬性添加其他邏輯,以便還檢查此表中是否有給定User和ClientId的匹配JTI ...

這可以做到而不必編寫自定義'JWTAuthorize'屬性,因為我很想使用默認值...

我懷疑這是需要在JwtBearerAuthenticationOptions中指定的東西嗎?

干杯!

我設法使用JwtBearerAuthenticationOptions上的自定義提供程序使此工作正常進行。

該提供程序繼承自IOAuthBearerAuthenticationProvider ,然后我專門使用ValidateIdentity方法來處理其他邏輯。

    public Task ApplyChallenge(OAuthChallengeContext context)
    {
        return Task.FromResult<object>(null);
    }

    public Task RequestToken(OAuthRequestTokenContext context)
    {
        return Task.FromResult<object>(null);
    }

    public Task ValidateIdentity(OAuthValidateIdentityContext context)
    {
        string userId = // user id from Token...
        Guid tokenId = // jti from Token...
        string appId = // aud/client id from Token...

        //do the DB check here...
        if (CheckUserToken(userId, tokenId, appId))
        {
            return Task.FromResult<object>(null);
        }
        else
        {
            context.SetError("unauthorized_access", "The supplied security identity for this user is not valid.");
            return Task.FromResult<object>(null);
        }
    }

然后,我在客戶端處理錯誤,以決定將用戶重定向到何處等。

如果有人有更好的建議,我很樂意見到他們:)

暫無
暫無

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

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