Microsoft.Owin.Security.WsFederation自定义授权属性API重定向

时间:2015-12-17 20:36:19

标签: angularjs asp.net-web-api2 owin ws-federation okta

因此,我们已使用Okta堆栈和SSO nuget包在OWIN解决方案的应用程序中集成了Microsoft.Owin.Security.WsFederation。它总体上运行良好,但是当WebApi的authorize属性添加到混合中时,我们遇到了问题。自定义authorize属性的工作方式与通过string参数提供的权限相同,但问题似乎与返回401 response的默认行为有关。似乎全局都在关注这个401,因为我从未点击我的自定义OWIN middleware组件进行登录(即:重定向到Okta)但是当返回302时,API请求仍然失败,触发了重定向到Okta。我读过的每篇帖子都表示要遵循Brock Allen撰写的this博客文章,但正如我所提到的那样,重定向永远不会触发此代码。我想过建立一个角度拦截器,但我根本不喜欢这种方法,所以我现在从403 (Forbidden)属性返回一个Authorize,这是不理想但可行的。 This SO帖子似乎是关于这个问题的主要讨论,但我没有按照那里的建议运气。这是迄今为止使用的中间件代码,是否有人对如何排除/ api路由被重定向到Okta有任何想法或想法?

        var fileSystem = new PhysicalFileSystem(@".\wwwroot");

        var options = new FileServerOptions()
        {
            FileSystem = fileSystem,
            EnableDefaultFiles = true,
            EnableDirectoryBrowsing = true,
        };

        app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(
            new CookieAuthenticationOptions
            {
                AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
            });

        app.UseWsFederationAuthentication(
                new WsFederationAuthenticationOptions
                {
                    MetadataAddress = ConfigurationManager.AppSettings["MetadataAddress"],
                    Wtrealm = ConfigurationManager.AppSettings["Wtrealm"],
                    TokenValidationParameters =
                    {
                        ValidAudience = ConfigurationManager.AppSettings["ValidAudience"]
                    }
                });


        app.Map("/api", x =>
        {
            dependencyResolver = x.UseApi();
        });

        app.UseFileServer(options);

1 个答案:

答案 0 :(得分:1)