代码之家  ›  专栏  ›  技术社区  ›  Tjaart

Identity Server调用它自己的配置终结点

  •  0
  • Tjaart  · 技术社区  · 7 年前

    我有两个需要身份验证的客户机。

    一个客户机是使用隐式流的SPA,另一个是使用客户机凭证流登录的直接系统集成。

    出于某种原因,当我的客户端凭据客户端调用我的API时,我的Identity Server应用程序尝试调用 .well_known/openid-configuration 终结点本身。

    调用没有任何意义,因为它首先是服务于配置的服务器,而该服务器正试图自己调用端点。

    有没有一种方法可以在不让Identity Server调用自己的端点的情况下填充此配置?

    下面是我的Identity Server配置的一个片段。

    services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = "Bearer";
                options.DefaultChallengeScheme = "oidc";
            }).AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = openIdConnectConfig.SignInScheme;
                options.SignOutScheme = IdentityServerConstants.SignoutScheme;
    
                options.Authority = openIdConnectConfig.Authority;
                options.RequireHttpsMetadata = false;
    
                options.ClientId = clientConfig.First(x => x.ClientId == "spa_app").ClientId;
    
                options.SaveTokens = true;
                options.SignedOutRedirectUri = "http://localhost:8080";
            }).AddIdentityServerAuthentication(options =>
            {
                options.Authority = openIdConnectConfig.Authority;
                options.RequireHttpsMetadata = false;
    
                options.ApiName = "api_client";
            });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Vidmantas Blazevicius    7 年前

    不可能阻止这种行为(至少不可能,除非您尝试实现 IConfigurationManager<OpenIdConnectOptions> )这实际上是一种预期行为,因为您的Web应用程序和Identity Server托管在同一应用程序上。对其自身终结点的调用是由于 AddOpenIdConnect 身份验证方案,在启动应用程序时,该方案将获取身份提供程序元数据信息,以进行JWT验证。

    理论上你可以去执行 IConfigurationManager<打开IDConnectOptions> 那不叫 MetadataAddress 并在身份验证方案生成器中设置该端点。

    .AddOpenIdConnect("oidc", options =>
            {
                ...
                ConfigurationManager = myCustomConfigurationManager,  //You would need to implement this
                ...
            })
    

    这是负责呼叫的罪犯 元地址 默认为的端点 authorityUri + /.well_known/openid-configuration .

    我建议您不要这样做,因为最终您将需要身份提供程序元数据信息,因此必须在本地或类似的地方对其进行快照和存储。