因此,我们Okta
在我们的应用程序中集成了一个SSO
利用OWIN
stack 和Microsoft.Owin.Security.WsFederation
nuget 包的解决方案。总体而言,它似乎运行良好,但是当将授权属性WebApi
添加到组合中时,我们遇到了问题。自定义授权属性按设计为通过字符串参数提供的权限工作,但是问题似乎出现在返回401 response
. 似乎这个 401 在全球范围内受到关注,因为我从来没有点击我的自定义OWIN middleware
组件来登录(即:重定向到 Okta)但是当302
返回 a 时 API 请求仍然失败,这会触发重定向到Okta
. 我读过的每一篇文章都表明要遵循这个Brock Allen 的博客文章,但是正如我提到的,重定向永远不会触发此代码。我考虑过构建一个 Angular 拦截器,但我根本不喜欢这种方法,所以我403 (Forbidden)
现在从Authorize
属性中返回一个,这并不理想但可行。 这篇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);