,试图对身份验证后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