如何通过一台ADFS服务器为多个网站提供服务

本文关键字:网站 服务 服务器 ADFS 何通过 一台 | 更新日期: 2023-09-27 18:17:38

我有两个服务器:其中一个服务UI(它被称为web),另一个工作与数据(它被称为webAPI)。

我尝试跨ADFS服务器实现身份验证。它对两个服务器都有依赖方信任: [urn=web,identifier=address/web],[urn=webapi,identifier=address/webapi]。

我调整了web的HttpConfiguration,用户可以认证并使用web提供的网站(很好)。

        var wsFedMetAdd = ConfigurationManager.AppSettings["wsFedMetAdd"];
        if (string.IsNullOrWhiteSpace(wsFedMetAdd))
            throw new ConfigurationErrorsException(Properties.Resources.InvalidMetadataAddress);
        var wsFedWtrealm = ConfigurationManager.AppSettings["wsFedWtrealm"];
        if (string.IsNullOrWhiteSpace(wsFedWtrealm))
            throw new ConfigurationErrorsException(Properties.Resources.InvalidWtrealm);
        appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
        });
        var options = new WsFederationAuthenticationOptions
        {
            MetadataAddress = wsFedMetAdd,
            Wtrealm = wsFedWtrealm,
            SignInAsAuthenticationType = "Federation"
        };
        appBuilder.UseWsFederationAuthentication(options);
        config.Filters.Add(new AuthorizeAttribute() { Roles = "Admin" });

一旦客户端获得RequestSecurityTokenResponse (SAML Token)。ADFS的响应也为进一步的请求(MSISAuth, MSISAuthenticated等)设置cookie。

webAPI有相同的HttpConfiguration实现(只有一个区别- wsFedWtrealm是urn: webAPI 而不是urn:web )。然后我尝试从客户端向webAPI发送请求,ADFS服务器要求再验证一次。

我不明白我应该怎么做才能使用我为web输入的webAPI相同的凭据。或者我应该使用SAML Token?


更新

哇。它在没有SAML令牌的情况下工作,仅使用cookie。web用户进行身份验证时,客户端(. asp.net)设置了不同的cookie。Federation, MSISAuth, MSISAuthenticated…)。然后我把地址栏的web链接换成webAPI链接,webAPI就不要求输入登录名和密码了。因此,数据显示在浏览器中。web和webAPI也接受身份验证。

但是现在的问题是,当javascript试图发送请求到webAPI时,我得到了错误:

XMLHttpRequest无法加载https://my_address/adfs/ls/?wtrealm=urn%3awebapi&wctx=_请求的文件中没有'Access-Control-Allow-Origin'标头资源。因此,不允许使用原产地"https://my_address:9001"访问。

如何通过一台ADFS服务器为多个网站提供服务

什么版本的ADFS?

你混合了两种协议- Web API通常使用OAuth。

为UI使用OpenID Connect,然后它将自然地流入WebAPI,如下所示:在WS2012 R2上使用ADFS保护WebAPI变得更加容易。

或者用一种更复杂的方法——当为非浏览器客户端提供安全webapi时,ADFS使用什么协议

这篇文章帮助我解决了我的问题。

我添加到代码的index.html新的元素iframe。属性src是我的webAPI的链接