簡體   English   中英

Web API中的客戶端證書和基於聲明的身份

[英]Client Certificates and Claims-Based Identity in Web API

如果訪問通過HTTPS實現為ASP.NET Web API Controller的端點的客戶端提供客戶端證書,則該證書可通過Request.GetClientCertificate 但是,我想知道:是否有可能以基於聲明的模型的形式提供與.NET 4.5中的安全模型集成的信息?

我想這樣做的主要原因是我需要不同的客戶端才能以不同的方式進行身份驗證以訪問相同的服務,因此我更願意從證書等細節中抽象出來。 我希望我的控制器能夠根據當前用戶的索賠做出決策,而不必擔心這些索賠的起源。

我知道有一個X509CertificateClaimSet類型,這使得它看起來像自然流程:

  1. 通過TLS / SSL傳遞的客戶端證書通過某種令牌映射過程表示為X509CertificateClaimSet (類似於您可以用於ACS的聯合提供程序生成的傳入cookie由SessionSecurityTokenHandler處理的方式)
  2. 聲明轉換模塊(從ClaimsAuthenticationManager派生並使用<claimsAuthenticationManager>元素配置的內容)檢查來自證書的聲明集,並將其轉換為特定於非令牌的特定於應用程序的聲明
  3. 處理程序查找特定於應用程序的聲明。

甚至還有一個X509SecurityTokenHandler ,聽起來應該這樣做。 但是,據我所知,這是針對在發送的消息中處理基於證書的身份驗證的情況而設計的 - 它似乎沒有任何支持證書的所有權證明發生在傳輸級別,即作為TLS / SSL握手的一部分。

我想知道是否需要編寫自己的模塊來執行此操作。 從理論上講,看起來可能只是處理AuthenticateRequest事件,查看證書請求,如果存在,則從證書構建X509CertificateClaimSet 但是......那又怎樣? 我只是創建自己的ClaimsPrincipal並替換現有用戶嗎? 或者是否有一些“正確”的方式將我發現的聲明添加到集合中? (客戶端證書不一定是聲明的唯一來源 - 我的應用程序已經在使用與ACS集成的聲明。是否有一種標准機制來確保所有可能的聲明來源都正確合並?)

它看起來像SessionAuthenticationModule (SAM)是當前提供聲明主體的身份模型組件,它只是替換先前在上下文中的那個以及當前線程的用戶。 但它似乎提供了可擴展性 - 如果覆蓋其ValidateSessionToken ,則返回構成主體的ClaimsIdentity對象集。 所以在理論上,我可以覆蓋它並在那時添加任何其他聲明。

但我不確定這是不行的方式。 據我所知,SAM在ClaimsAuthenticationManager完成其聲明轉換后執行此操作。 或者聲稱轉換錯誤的模型與這里一起去?

看看這里 :客戶端證書身份驗證和聲明生成是Thinktecture.IndetityModel一部分。

如果我是你,我會外部化身份驗證 - 讓其他一些服務提供身份驗證,並返回帶有所需聲明的SAML令牌。

這樣,在您的應用程序中,您並不真正考慮證書,您只需要聯合身份提供商提出一些具體的聲明。

然后,您實現一個身份提供程序以實際接受證書,但傳出SAML隱藏此實現詳細信息並將證書轉換為對您的應用程序有用的聲明集。

暫無
暫無

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

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