ADFS+;IdentityServer3+;移动+;MVC

ADFS+;IdentityServer3+;移动+;MVC,adfs,identityserver3,thinktecture,Adfs,Identityserver3,Thinktecture,我正在构建一个具有以下上下文的原型 两个客户端应用程序(MVC和Mobile) 将服务器3标识为依赖方 作为身份提供者的ADFS 3.0 IdentityServer3.WsFederation插件提供SAML支持 MVC端已经完成,但我不确定如何接近移动端 我以前的尝试使用了Web API和ADFS的“ADFS/services/trust/13/usernamemix”端点。这允许移动设备向API发送凭据,然后API使用ADFS的端点对用户进行身份验证。然后它将JWT令牌返回到移动应用程

我正在构建一个具有以下上下文的原型

  • 两个客户端应用程序(MVC和Mobile)
  • 将服务器3标识为依赖方
  • 作为身份提供者的ADFS 3.0
  • IdentityServer3.WsFederation插件提供SAML支持
MVC端已经完成,但我不确定如何接近移动端

我以前的尝试使用了Web API和ADFS的“ADFS/services/trust/13/usernamemix”端点。这允许移动设备向API发送凭据,然后API使用ADFS的端点对用户进行身份验证。然后它将JWT令牌返回到移动应用程序

我们必须从Idp接收SAML令牌(可以是ADF或其他Idp),但我们的应用程序对令牌的类型不可知

我有两个问题

  • IdentityServer3不支持使用上述端点的ws-trust(据我所知),那么对于移动设备登录,这种情况下的正确方法是什么
  • 是否需要WsFederation插件,因为IdentityServer3可能会处理将SAML令牌转换为客户端应用程序的JWT

  • 首先,我不建议将SAML用于移动设备(特别是本机应用程序),因为SAML假定客户端是浏览器。在移动应用程序中,它打开浏览器进行身份验证,这并不是我认为最好的方法。我建议对移动设备使用OpenID/Oauth

    Idp可以支持多种登录协议,如WS-Fed、SAML2.0或OAuth。这取决于客户端是否使用相关协议

    对于使用IdentityServer3的WS-Fed,有一个OWIN中间件可以帮助实现它

     using Microsoft.Owin.Security.WsFederation;
    
          app.UseWsFederationAuthentication(
                        new WsFederationAuthenticationOptions
                            {
                                Wtrealm = "https://localhost:44309/core",   //identityserver3
                                Wreply = "replyaddress",
                                MetadataAddress = "https://localhost/federationmetadata.xml",
                                AuthenticationType = "adfs",
                                Caption = "ADFS",
                                SignInAsAuthenticationType = "sometype"
                            });
    

    上面的代码将带您进入ADFS登录屏幕,成功身份验证后,您将重定向回上面提到的
    Wreply
    地址,它将返回SAML 1.1响应。您需要解析它并使用它。

    如果您需要SAML令牌,您如何不可知?我们可以使用JWT或SAML令牌。