【问题标题】:.Net Framework Multi-Tenant OIDC Authentication.Net Framework 多租户 OIDC 身份验证
【发布时间】:2022-10-24 15:08:32
【问题描述】:

我们有 3 个应用程序(桌面、移动、Excel 插件),这意味着 3 个客户端 ID,需要调用我们的 API。

是否可以将我们的 API 配置为使用这 3 个客户端 ID? 这是当前配置:

            string OidcAuthority = Config.OidcAuthority;
            string OidcRedirectUrl = Config.OidcRedirectUrl;
            string OidcClientId = Config.OidcClientId;
            string OidcClientSecret = Config.OidcClientSecret;

            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            var oidcOptions = new OpenIdConnectAuthenticationOptions
            {
                Authority = OidcAuthority,
                ClientId = OidcClientId,
                ClientSecret = OidcClientSecret,
                PostLogoutRedirectUri = OidcRedirectUrl,
                RedirectUri = OidcRedirectUrl,
                ResponseType = OpenIdConnectResponseType.Code,
                Scope = OpenIdConnectScope.OpenId                    
            };
            app.UseOpenIdConnectAuthentication(oidcOptions);

编辑:

这是我们使用 oauth2 和 Auth0 服务时的代码。

            var domain = Config.Domain;
            var apiIdentifier = Config.ApiIdentifier;
            var keyResolver = new OpenIdConnectSigningKeyResolver(domain);

            app.UseJwtBearerAuthentication(
                new JwtBearerAuthenticationOptions
                {
                    AuthenticationMode = AuthenticationMode.Active,
                    TokenValidationParameters = new TokenValidationParameters()
                    {
                        ValidAudience = apiIdentifier,
                        ValidIssuer = domain,
                        IssuerSigningKeyResolver = (token, securityToken, kid, parameters) => keyResolver.GetSigningKey(kid)
                    }
                });

我知道我必须使用类似的东西,但我有 3 个可能的应用程序可以生成令牌,这意味着 3 个可能的受众...... 我该怎么做?

【问题讨论】:

    标签: .net authentication openid-connect


    【解决方案1】:

    可以并且通常建议对多个相关客户端使用相同的 API。如果使用 C#,您将使用此选项:

    app.useJwtBearerAuthentication
    

    您使用的技术堆栈是为网站设计的。加载 HTML 页面时,如果没有有效的身份验证 cookie,用户会被突然重定向到登录。

    相反,本机客户端通过直接 HTTP 请求调用 API,上面的堆栈会尝试重定向这些请求,这将是错误的行为。

    相反,本机应用程序应该使用自己的客户端 ID 实现自己的 OIDC 流。 RFC8252 标准描述了流程。 API 不需要知道调用者的客户端 ID。

    【讨论】:

    • 谢谢。您有为此方法提供的选项的任何示例吗?我拥有的那个包含一个 API 标识符,它在我的情况下不起作用,因为我有 3 个 API。
    • 我编辑了问题
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2023-03-11
    • 2022-06-23
    • 2021-11-17
    • 2022-01-20
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多