以下是我目前的情況。我設置了一個ADFS 2.0服務器,並連接了兩個RP Web應用程序。這些應用程序App1和App2是帶有Web API後端的Web應用程序。使用Javascript AJAX調用。使用ADFS瞭解Thinktecture Web API安全性
從我最初對WIF的理解中,我想我可以通過瀏覽器登錄,然後可以訪問這兩個應用程序。這證明是不正確的,因爲我無法從App1調用App2的Web API函數。我可以做到這一點的唯一方法是通過輸入到App2的URL,只有這樣我才能從應用程序1的後續調用工作(正確的FedAuth cookie傳遞到標題中)
所以我一直在搜索和搜索用於從App1實際調用App2的Web API的方法,但我已經空手而歸。我有一個解決方案最接近的是(我相信)通過添加一個消息處理程序,如本例
如果我理解正確這,我應該能夠作出的WebAPI收到我的SAML2安全令牌。
我的代碼如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var authentication = CreateAuthenticationConfiguration();
config.MessageHandlers.Add(new AuthenticationHandler(authentication));
}
}
private static AuthenticationConfiguration CreateAuthenticationConfiguration()
{
System.Diagnostics.Debugger.Break();
var authentication = new AuthenticationConfiguration
{
ClaimsAuthenticationManager = new MyClaimsAuthenticationManager(),
EnableSessionToken = true,
RequireSsl = false
};
authentication.AddSaml2(
issuerThumbprint: **Hidden**,
issuerName: "https://192.168.0.55/adfs/ls/",
audienceUri: "http://localhost/MyCompany.App2/",
certificateValidator: X509CertificateValidator.None,
options: AuthenticationOptions.ForAuthorizationHeader("AdfsSaml"),
scheme: AuthenticationScheme.SchemeOnly("AdfsSaml"));
return authentication;
}
的調用達到MyClaimsAuthenticationManager.Authenticate(),但是IncomingPrincipal仍然沒有通過認證。我沒有辦法知道它是否收到SAML2令牌,因爲我不能MyClaimsAuthenticationManager.Authenticate()
我的問題之前,任何調試:
1)是否可以叫我的應用2的Web API函數儘管在App1中進行了身份驗證? (他們使用相同的ADFS)
2)如果可能,我使用ThinkTecture AuthenticationHandler在正確的軌道上?
謝謝。
這是因爲用戶被認證到App1中。 App1正試圖代表用戶訪問App2。我敢打賭,如果你從App1的客戶端向App2發出了AJAX調用,它就會工作。在你的情況下,你需要將用戶的身份從App1委託給App2。 –
它不起作用,它沒有App 2必需的FedAuth cookie,所以這個調用被未經授權/重定向到登錄頁面 – Sdupere