在一个评估各种不同身份提供者的项目中,我有一个代码库,它已经使用WsFederation-Owin包成功地通过了Azure AAD和Okta的身份验证。评估列表上的下一个是内部托管的ADFS。正如前两个一样:
我进入了idp登录页面,
登录,
使用POST将get发送回主机(在本地运行),POST中的表单变量包括wtresult形式变量中的RequestSecurityTokenResponse。
已发出外部登录cookie
我的ExternalLoginCallback函数称为
这里不同的是:
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
loginInfo为null。以下是我尚未破译的潜在线索。如果我不设置
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
在我的启动过程中,我在User.identity中获得了一个经过身份验证的声明标识。但是,该标识中没有用户名、名称或角色声明。如果比较从Okta和ADFS返回的令牌,则存在两个差异。两者都有upn、名称和角色声明,但ADFS声明是SAML 1.0断言,其中Okta是SAML 2.0。另一个区别是ADFS签名方法是sha265,其中Okta是sha1。
这些差异会造成我的问题吗?配置ADFS的人不知道指定这些东西的方法,WsFederation中间件是否可以配置为请求特定的东西或使用ADFS正在使用的东西?
已经找到了答案。需要将saml-nameid声明类型添加到ADFS中,以便OWIN中间件将其作为有效的外部登录。感谢这篇指出细节的文章。
http://darb.io/blog/2014/06/30/WebAPI-and-ADFS-as-external-login-provider/