以前我们的web应用程序(。NET Framework 4.8)使用Windows身份验证,然后我们切换到Sustainsys/Saml2与Startup.cs和OWIN登录。
事实证明,SAML登录不能被Task Scheduler/CRON和外部API消费者使用,因为SAML需要人工交互。因此,SAML必须禁用,其他身份验证必须用于以下页面:
- 由Task Scheduler运行的后台脚本(aspx页面);
- 第三方应用程序使用我们的一些api GET/POST;
Task Scheduler不支持saml2等外部第三方应用程序,它们通过存储在配置中的登录名/密码连接。
据我所知,SAML2需要通过web弹出窗口(在我们的情况下是azure)进行人工交互,不能自动化。
使用OAuth(令牌)和SAML解决了这个问题。如果OAuth在OWIN Startup.cs中放在SAML之前,即使SAML被激活(我认为SAML代码看到该线程),令牌API也会工作。CurrentPrincipal已设置,因此跳过SAML步骤)
using System;
using System.Web.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Owin;
using Owin;
using BundleTable = System.Web.Optimization.BundleTable;
////
[assembly: OwinStartup(typeof(MyApplication.App_Start.Startup))]
namespace MyApplication.App_Start
{
public class Startup
{
// Configure the HTTP request pipeline.
public void Configuration(IAppBuilder app)
{
ServiceCollection services = new ServiceCollection();
ConfigureServices(services);
OAuthConfiguration oauthConfig =
MyConfigurationManager.ReadOAuth();
OAuthSetup oauth = new OAuthSetup(app, oauthConfig);
/* server + consumer
IdentityServer 3
// server. Probably this step can be skipped if use Azure as server
app.Map(configuration.AuthServerUrl, idsrvApp =>
{
idsrvApp.UseIdentityServer(options);
});
//consumer
app.UseJwtBearerAuthentication,
app.UseClaimsTransformation */
oauth.Use();
SamlConfiguration samlConfig =
MyConfigurationManager.ReadSaml();
SamlSetupSustainsys saml = new SamlSetupSustainsys(app, samlConfig);
/*
Sustainsys
app.UseSaml2Authentication(options);*/
saml.Use();
WebApiConfig.Register(config);
app.RequireAspNetSession();
app.UseWebApi(config);
BundleTable.EnableOptimizations = false;
BundlingConfig.Register(BundleTable.Bundles);
}
// Add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//services.AddMvcCore();
}
}
}