簡體   English   中英

如何從WSO2 API Manager驗證JWT

[英]How to validate a JWT from WSO2 API Manager

在后端Web服務位於單獨的服務器上並且需要確定給定請求通過APIM網關身份驗證和授權機制傳遞的情況下,驗證特定API Manager實例是否發出JWT的推薦方法是什么?

我知道JWT中的頭字段包含一個'x5t'字段,它是對租戶密鑰庫中證書的編碼引用,詳見此處:

https://asankastechtalks.wordpress.com/2013/12/05/obtaining-certificate-used-to-sign-a-jwt/

由於后端Web服務位於單獨的服務器上,我們是否需要以某種方式將公鑰分發給它? 另外,我們如何更新用於簽署JWT的證書,因為它現在正在使用默認值?

x5t中的數據不是整個證書,它只是一個哈希來幫助您識別您擁有的證書是否相同。 這意味着您需要將公共證書上載到接收服務。

使用https可以在握手中檢索公共證書,然后客戶端可以檢查此證書是否由受信任的CA簽名。 然而,通過此驗證,沒有這樣的機制,因此您不能只信任您必須信任每個公共證書的CA.

還有另一個可選標頭'x5u',其中包含指向公共證書的URL鏈接,但APIM未設置該值。

這是您可以使用WSO2令牌中的x5t哈希作為查找從本地存儲獲取證書的方法:

// Use JwtSecurityTokenHandler to validate the JWT token
var tokenHandler = new JwtSecurityTokenHandler();

// Read the JWT
var parsedJwt = tokenHandler.ReadToken(token);

// Get X509 public certificate
var signerAlgorithm = ((JwtSecurityToken)parsedJwt).SignatureAlgorithm;
var signerHash = ((JwtSecurityToken)parsedJwt).Header["x5t"];
var thumbprint = Encoding.UTF8.GetString(Convert.FromBase64String(signerHash.ToString()));

X509Store store = new X509Store(StoreName.TrustedPublisher);
store.Open(OpenFlags.ReadOnly);
var cert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false)[0];

我認為您可以通過在身份提供商下的API管理器中導入證書來驗證JWT。

想象一下,您正在使用Wso2 IS生成JWT令牌,然后您需要導出IS證書並將其導入到wso2 api管理器中。您必須驗證IS和API管理器中的密鑰“IDTokenIssuerID”是否相同

我認為這篇文章可以幫助您理解: https//medium.com/wso2-learning/how-to-protect-your-apis-with-self-contained-access-token-jwt-using-wso2-api-manager -and-wso2-75673d8a4686

暫無
暫無

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

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