wsFederation和ajax全到Web API
我有一个MVC应用程序,可以登录到WSSTS联合会(到目前为止我使用的是Identity Server v2)。 在这种情况下一切正常。我正在为此使用OWIN身份验证中间件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
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" };
}
}