2016-06-14 39 views
-1

我的智威湯遜令牌看起來像如下:如何加密Web Api C#中的JWT令牌?

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsImF1ZCI6Imh0dHA6XC9cL2V4YW1wbGUuY29tIiwiaWF0IjoxMzU2OTk5NTI0LCJuYmYiOjEzNTcwMDAwMDAsImV4cCI6MTQwNzAxOTYyOSwianRpIjoiaWQxMjM0NTYiLCJ0eXAiOiJodHRwczpcL1wvZXhhbXBsZS5jb21cL3JlZ2lzdGVyIiwidGVzdC10eXBlIjoiZm9vIn0.UGLFIRACaHpGGIDEEv-4IIdLfCGXT62X1vYx7keNMyc

如果我複製上面的JWT令牌,並將其粘貼在https://jwt.io/那麼實際的信息顯示這樣

Image

我想加密JWT令牌無法在Web Api中訪問我的信息。所以,我想使用任何加密算法,如果是這樣,請給我提供適當的解決方案

這是我的Startup.cs文件來授權JWT令牌。

 // Api controllers with an [Authorize] attribute will be validated with JWT 

     app.UseJwtBearerAuthentication(
      new JwtBearerAuthenticationOptions 
      { 
       AuthenticationMode = AuthenticationMode.Active, 
       AllowedAudiences = new[] { audience }, 
       IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
       { 
        new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret) 
       } 
      }); 

    } 
+2

雖然JWT允許對令牌進行加密,但通常沒有必要,因爲連接已經通過TLS/SSL進行了保護。 – Dirk

回答

2

爲什麼你認爲這是一個問題,有人可以看到這些信息?如果您正在使用JWT進行身份驗證,那麼只有通過身份驗證的用戶才能獲得此令牌,並且可能包含有關此用戶的信息。因此,用戶無法看到關於他自己的信息並不會造成什麼影響。

最重要的是令牌是mac'ed,所以沒有人可以僞造它,假裝是另一個用戶,這應該是足夠的。

正如在評論中提到的,你應該使用TLS,所以它在轉換中被加密。

+0

在我的JWT令牌中,我想存儲像UserID這樣的信息。因此,有人可以得到它並破解 –

+0

如果您使用TLS,「Somebody」只是具有此Id的用戶或具有物理訪問權限的用戶,所以這不是問題。瞭解UserId也不是問題(除非你有其他更重要的漏洞),所以使用SQL Server中的身份信息並不是問題,例如,問題在於,如果您在請求時未檢查用戶輸入和訪問權限。另一件事是,即使用戶知道userId,他們也不能在JWT中將其更改爲mac'ed。 –