wsFederation和ajax全到Web API

wsFederation和ajax全到Web API,ajax,asp.net-mvc,asp.net-web-api,wif,ws-federation,Ajax,Asp.net Mvc,Asp.net Web Api,Wif,Ws Federation,我有一个MVC应用程序,可以登录到WSSTS联合会(到目前为止我使用的是Identity Server v2)。 在这种情况下一切正常。我正在为此使用OWIN身份验证中间件 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType, CookieName

我有一个MVC应用程序,可以登录到WSSTS联合会(到目前为止我使用的是Identity Server v2)。 在这种情况下一切正常。我正在为此使用OWIN身份验证中间件

 app.UseCookieAuthentication(new CookieAuthenticationOptions
 {
      AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
      CookieName = ".AspNet.Federation"
 });

 //Trusted Issuer
 parameters.ValidIssuer = "http://identityserver.v2.thinktecture.com/trust/localSTS";

 var options = new WsFederationAuthenticationOptions
 {
      MetadataAddress = "https://IdSrv/FederationMetadata/2007-06/FederationMetadata.xml",
      Wtrealm = "urn:relyingparty2",
      IssuerAddress = "https://IdSrv/issue/wsfed",
      TokenValidationParameters = someparameters,
 };

 app.UseWsFederationAuthentication(options);
现在,我有另一个应用程序,它是WebAPIOne,托管在另一个域上

我希望通过MVC应用程序验证的用户能够从该应用程序向web api进行Ajax调用。 MVC应用程序如何将用户传递到web api

我尝试在ajax调用上设置with credentials选项,以将身份验证cookie传递给webapi服务

var request = {
            url: 'https://localhost:44305/api/test/GetStrings',
            xhrFields: {
                withCredentials: true
            },
            async: true,
            type: 'GET',
            crossDomain: true,
            success:
            function () {
                alert('ok');
            },
            error: function () {
                alert('ko');
            }
        };

        $.ajax(request);
这是web api控制器,配置为启用CORS(工作正常)

[启用CORS(源代码:https://localhost,http://localhost,标题:“*”,方法:“*”,SupportsCredentials=true)]
公共类TestController:ApicController
{
[HttpGet]
[授权]
公共IEnumerable GetStrings()
{
返回新字符串[]{“value1”,“value2”};
}
}
但是当涉及到webapi配置时,我不知道该怎么做。 使用与web应用不工作相同的配置,因为请求被重定向到STS以进行令牌颁发

有什么想法吗? 这是正确的模式吗


我也在网上看到,有些人会将从STS收到的SAML令牌作为ajax调用的授权头中的承载令牌传递,但通常都说这是不推荐的。

你有没有想过?我也遇到了同样的问题——当我浏览到任意一个页面时,我都可以进行身份验证。但是,当我使用WebApp来ajax调用WebAPI服务时,它会重定向到sts登录。我还是很抱歉回答得太晚了。我没有弄明白,但据我记忆,我们使用OAuth授权来帮助将令牌传递给Web API
[EnableCors(origins: "https://localhost,http://localhost", headers: "*", methods: "*", SupportsCredentials = true)]
public class TestController : ApiController
{
    [HttpGet]
    [Authorize]
    public IEnumerable<string> GetStrings()
    {
        return new string[] { "value1", "value2" };
    }
}