我已按照此處的說明獲取Web API的訪問令牌。從Azure Active Directory驗證JWT
https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx
我有這個工作,但該文件是模糊的,當談到搞清楚如何驗證在PHP中的令牌。
您可以使用響應中返回的訪問令牌對受保護的資源(例如Web API)進行身份驗證。通常,使用RFC 6750中介紹的承載方案將令牌呈現給Web API。HTTP規範說明了如何在HTTP請求中使用承載令牌來訪問受保護的資源。
當Web API接收並驗證令牌時,它爲本地客戶端應用程序提供對Web API的訪問權限。
如何在應用程序中驗證JWT?我有一個使用PHP openssl_verify()函數與令牌,signiture,密鑰和算法PHP框架,但我收到的時候我使用私鑰從天青與SHA256算法錯誤:
openssl_verify(): supplied key param cannot be coerced into a public key
這使我相信我在PHP中用來驗證的關鍵是不正確的。目前,我正在使用爲Active Directory應用程序生成的私鑰,當碰到oauth2 /令牌url時,碰巧也是我用於「client_secret」參數的相同值(任何其他值都不會導致令牌被生成,所以這可能是正確的)。
的關鍵是類似(但它實際上不是):
cLDQWERTYUI12asdqwezxctlkjpoiAn7yhjeutl8jsP=
哪裏beleive OpenSSL的需要有一個證書......如果是這樣,我似乎無法找到這個地方證書是在Azure門戶。
我在這裏錯過了什麼?我應該使用openssl_verify()來驗證JWT以及我在Azure中找到它的關鍵是什麼?
感謝
-
UPDATE:
我發現這裏的公共密鑰:https://login.windows.net/common/discovery/keys
不過,我仍然無法使用提供驗證簽名的X5C。你如何在PHP中做到這一點?
-
更新2:
我使用的轉換來創建同時使用的 'e' 和 'n' 參數的公共密鑰爲.pem文件。這收到了一個公鑰。
error:0906D06C:PEM routines:PEM_read_bio:no start line
看起來你已經解決了這個問題在http://stackoverflow.com/questions/32185238/how-do-i-verify-a-json-web-token-using-a-public-rsa-key和如果你能在這裏總結解決方案的關鍵點,那麼會更好,那麼其他有類似問題的社區會從這個線索中受益。 –