,試圖對身份驗證後ADFS提取承載令牌被打......如何從WsFederationAuthentication獲得承載令牌發送到API
我將接受一個承載令牌並驗證它針對ADFS的API。
我有一個Web窗體(.net 4.5.1)應用程序,我正在修改使用ADFS 3.0來實現SSO身份驗證。到目前爲止,它對ADFS服務器進行了正確的身份驗證(呈現給ADFS登錄頁面並登錄)。
我的問題是,我現在想讓WebForms應用程序使用持票人標記調用我的Web API,我希望在ADFS返回的響應中存在某處,但是它在哪裏以及如何檢索它?
我嘗試使用SecurityTokenValidated和SecurityTokenReceived WsFederationAuthenticationNotifications事件,如下:
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType, // "WS-Fed Auth (Primary)",
Wtrealm = realm,
MetadataAddress = metadata,
Notifications = new WsFederationAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("Home/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
},
SecurityTokenValidated = token =>
{
Token = token.AuthenticationTicket.ToString();
return Task.FromResult(0);
},
SecurityTokenReceived = token =>
{
Token = token.ToString();
return Task.FromResult(0);
}
}
});
}
但我無法找到令牌由事件返回的對象的任何地方...... 我在想什麼?
感謝您的幫助。
感謝您的幫助,但我很困惑。我首先測試了一個Windows客戶端,它對ADFS進行了身份驗證,然後將它的不記名令牌發送給我的API,然後使用OWIN對它進行重新驗證,這似乎是根據示例進行驗證的方法......該方法需要更改當WebForms應用程序替換Windows客戶端時正確的事情? (我希望我的API不必關心叫什麼) – zukanta
API確實不在乎。不同之處在於,在Windows客戶端中,您獲得了一個專門用於API的令牌,使用Web應用程序(無論是表單還是mvc)都嘗試爲API重新使用您獲得的用於登錄Web應用程序的令牌。代幣是不可替代的,它們就像銀行支票 - 爲我寫的一張支票不能兌現,反之亦然 – vibronet
維托裏奧,我是你工作的忠實粉絲。非常高興你花時間來回答我的問題。現在,我在我的研究和許多其他許多文章中查看了許多文章,但無法找到內部部署ADFS/webforms/WCF API(本身不是Web API)的示例...如果我不應該發送從我的Web應用程序到我的API的令牌,API應如何驗證其調用者? – zukanta