OWIN OAuth 2 令牌是如何實際創建的?
我們有 OWIN OAuth 2.0 工作(感謝這篇精彩的文章),但需要更深入地了解在 HTTP 響應中將其
ClaimsIdentity轉換為實際字元串的實際過程。access_token我們
ClaimsIdentity在 OAuth 授權提供程序中創建 at 這個方法:public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { // <snip> public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { // validation, user checking code here var identity = new ClaimsIdentity(context.Options.AuthenticationType); identity.AddClaim(new Claim("sub", context.UserName)); identity.AddClaim(new Claim("role", "user")); context.Validated(identity); } }當我們將 HTTP POST 請求設置為
grant_type=password&username=user007&password=jamesbond(放鬆,這裡的密碼可以)時,我們會得到 HTTP POST 響應正文
{"access_token":"9K8VtOBseU0-XZfdGe2_urn2HESY3jLkpgvowOQFPXsHeWNOrTlTVzfPu35ZEvr4AqSj_b0laesBegtVWuR8R-aItnNXw4vXiuCg0cTNMUKP_yfi89VhD446o2X6ffL8upwZVILpomweSweIVlDmwUDzIwf1ZqubrQ8vuiQDFu-_7vpjPwJ5yVvomQ75agsJWMZk-H_bVWSObds82aM8LCRJwb2bUJchr6_L1GP8xdXqRQz24uDhHvco-XByyMSMzZm-Qo0VVBbocbgP64OJulbihVG_W9e8G69UfbX99pIYiLyE4jixiUtjOKSiMYBISW3_fg","token_type":"bearer","expires_in":1799,"as:client_id":"","userName":"user007",".issued":"Fri, 31 Oct 2014 16:02:05 GMT",".expires":"Fri, 31 Oct 2014 16:32:05 GMT"}問題:創建實際
access_token字元串的邏輯是什麼?問題中的一些具體問題
access_token該字元串的內部結構是什麼?- 它是加密的還是簽名的或兩者兼而有之?使用的密鑰是什麼(假設 IIS/Azure 雲服務)?
- 我們如何覆蓋生成發出的實際字元串的實現,然後在後續訪問中檢查相同的令牌/字元串?
謝謝
很高興我的文章有用,請找到以下答案:
1 - 這個“神奇”字元串是一個加密或簽名的字元串(糟糕的 MSDN 文件,說加密或簽名不清楚),其中包含已登錄使用者的所有聲明和票證屬性的反序列化版本。如果在 IIS 模式下,加密/簽名是通過machineKey節點(文件)中的“decryptionKey”和“validationKey”鍵值完成的。如果作為獨立的 OWIN 應用程序執行,則加密使用舊版 DPAPI 來保護它,並且實際上使用過時的 3DES 算法(文件)。它的預設實現在此處的原始碼中。
2 - 在第 1 點中回答。
3 - 查看我的新文章,我在其中展示瞭如何發布簽名的 Json Web 令牌而不是預設訪問令牌。
希望這能回答你的問題。