gpt4 book ai didi

asp.net-mvc - 在 DEBUG 模式下绕过 OWIN WS-Federation 身份验证

转载 作者:行者123 更新时间:2023-12-04 03:09:34 25 4
gpt4 key购买 nike

我们希望我们的开发人员能够通过使用 OWIN WS-Federation 中间件在使用 ADFS 进行身份验证的应用程序中调试新代码。然而,WS-fed 身份验证依赖方重定向到开发应用程序服务器,而不是本地 VS 实例。

就组织策略而言,使用大量本地主机开发人员机器配置 ADFS 依赖方信任是不可能的,因此我只能尝试在 DEBUG 模式下禁用身份验证。

我已经尝试了以下所有方法来绕过对 ADFS 的 OWIN 中间件调用:

  1. 使用自定义 AuthorizeAttribute as in this question这样 MVC [Authorize] 属性在 DEBUG 模式下有选择地返回错误的“true”。
  2. 将 MVC Controller [Authorize] 包装在条件中,以便它仅在发布代码中激活,如下所示:

    namespace eim.Controllers
    {
    #if RELEASE
    [Authorize]
    #endif
    public class CoreController : Controller
    {
    // GET: Core
    public ActionResult Index()
    {
    return View();
    }
    } }

这里的 RELEASE 编译器常量是在 Release Build Configuration 中定义的: enter image description here

  1. 在 Startup 类、Configure 方法中连接 OWIN 中间件时,测试 HttpContext.Current.IsDebuggingEnabled 以选择性地配置 app.AuthenticationOptions,如以下代码片段所示:

    public void ConfigureAuth(IAppBuilder app)
    {
    if (!HttpContext.Current.IsDebuggingEnabled)
    {


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

    var audienceRestriction = new AudienceRestriction(AudienceUriMode.Never);

    var issuerRegistry = new ConfigurationBasedIssuerNameRegistry();
    IDictionary<string, string> trustedIssuers = issuerRegistry.ConfiguredTrustedIssuers;

    issuerRegistry.AddTrustedIssuer(param1, param2);



    //Build up Configuration variables before entering the Options
    //Create a SecurityTokenHandlerConfiguration
    SecurityTokenHandlerConfiguration ourSecurityTokenHandlerConfiguration =
    new SecurityTokenHandlerConfiguration()
    {
    AudienceRestriction = audienceRestriction,
    IssuerNameRegistry = issuerRegistry
    };

    //Create an EncryptedSecurityTokenHandlerEx
    EncryptedSecurityTokenHandlerEx ourEncryptedSecurityTokenHandlerEx =
    new EncryptedSecurityTokenHandlerEx(
    new X509CertificateStoreTokenResolver(StoreName.My, StoreLocation.LocalMachine)
    );
    //create a SamlSecurityTokenHandlerEx
    SamlSecurityTokenHandlerEx ourSamlSecurityTokenHandlerEx = new SamlSecurityTokenHandlerEx
    {
    CertificateValidator = X509CertificateValidator.None,
    Configuration = ourSecurityTokenHandlerConfiguration
    };


    app.UseWsFederationAuthentication(
    new WsFederationAuthenticationOptions
    {
    Wtrealm = realm, //set above from AppSettings
    MetadataAddress = adfsMetadata, //set above from AppSettings
    Configuration = new WsFederationConfiguration()
    {
    TokenEndpoint = myTokenEndpoint
    },
    TokenValidationParameters = new TokenValidationParameters
    {
    AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
    ClientDecryptionTokens = new ReadOnlyCollection<SecurityToken>(
    new List<SecurityToken>
    {
    new X509SecurityToken(ourCertificate)
    })
    },
    SecurityTokenHandlers = new SecurityTokenHandlerCollection
    {
    ourEncryptedSecurityTokenHandlerEx,
    ourSamlSecurityTokenHandlerEx
    }
    });

    };
    }

无论应用处于 DEBUG 还是 RELEASE 状态,这些方法中的每一种方法的结果都是 ADFS 授权触发和回复重定向工作(换句话说,身份验证过程完成)。

让我们通过查看所有中间件配置细节来尽量避免偏离轨道,因为这些来自 Scott Brady's SAML decription primer。这里和Chris Klug's found here .所有的东西都工作正常,除了我无法在本地 VS 开发环境的 Debug模式下禁用它(到目前为止)。

最佳答案

我发现了我自己的问题:使用自动构建/发布,条件编译器常量 (CCC) 在 Visual Studio 配置用户界面中声明为“RELEASE”。不可用——即 CCC 不会随解决方案向上传输到 VSTS(或者它们可能向上传输,但不会被自动构建/发布所消耗。)

因此,在构建步骤中,我必须使用以下语法重新定义 CCC“RELEASE”:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\" /p:IgnoreDeployManagerRuntimeVersion=true /p:DefineConstants="RELEASE"

当然只有最后一个参数是CCC定义。

请记住,我对 CCC 常量名称“RELEASE”的选择是任意的,可以是“FOO”或“SERVER”或任何其他有用的常量名称。

一旦到位,上面的选项 #2 在本地主机和部署版本中都可以正常工作。

关于asp.net-mvc - 在 DEBUG 模式下绕过 OWIN WS-Federation 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com