程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App Services)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App services)?

开发过程中遇到无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App services)的问题如何解决?下面主要结合日常开发的经验,给出你关于无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App services)的解决方法建议,希望对你解决无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App services)有所启发或帮助;

我正在尝试向部署在 Azure 应用服务中的 Blazor 服务器应用添加多租户身份验证和授权。场景非常基础:

  1. 允许多租户身份验证(运行良好)
  2. 将身份验证限制为指定的租户/颁发者(此代码在 startup.cs 中)
  3. 授权经过身份验证的用户

但第 2 步失败了。当我在 Azure 中部署我的应用程序时,我仍然可以使用来自未经验证的颁发者的帐户打开应用程序。这是我的代码(startup.cs):

public IConfiguration Configuration { get; }
public voID Configureservices(IserviceCollection services)
        {
            services.AddAuthentication(OpenIDConnectDefaults.AuthenticationscheR_260_11845@E)
                    .AddMicrosoftIDentityWebApp(options =>
                    {
                        Configuration.bind("AzureAd",options);
                        // ReStrict users to specific belonging to specific tenants
                        options.TokenValIDationParameters = new TokenValIDationParameters 
                        {   ValIDateIssuer = true,// TrIEd first this,but with no effect:
                            // Validissuers = new List<String> {
                            //    "https://sts.windows.net/<tenant1>/",//    "https://sts.windows.net/<tenant2>/"
                            //},//So instead trIEd to use IssuerValIDator,but this dID not reStrict access either:
                            IssuerValIDator = ValIDateSpecificIssuers
                        };
                    });

            services.AddControllersWithVIEws()
                .AddMicrosoftIDentityUI();
//...

private String[] GetAcceptedTenantIDs()
        {
            return new[]
            {
            "<tenant1>","<tenant2>",};
        }

        public String ValIDateSpecificIssuers(String issuer,SecurityToken securityToken,TokenValIDationParameters valIDationParameters)
        {
            var validissuers = GetAcceptedTenantIDs().SELEct(tID => "https://login.microsoftonline.com/{tID}");
            if (validissuers.Contains(issuer))
            {
                return issuer;
            }
            else
            {
                throw new SecurityTokenInvalidissuerException("The sign-in user's account does not belong to one of the tenants that this Web App accepts users from.");
            }
        }

我正在使用具有多组织身份验证的 Visual studio Blazor Server App 项目模板。相关代码部分没有其他更改(appsetTings.Json 中的“TenantID”:“Organizations”除外)。 我发现了这个 post,它说 Validissuer(s) 的行为不像人们预期的那样。这就是我尝试使用 IssuerValIDator 的原因。不幸的是,结果相同。

我错过了什么?接下来我应该尝试什么?

解决方法

@H_801_24@

我终于弄明白了(感谢@JimXu,他说@R_723_10675@用 fiddler)。 问题出在我的Azure 应用服务应用注册设置中:

  1. 我有应用服务身份验证“开启”。因此,身份验证过程使用的是(https://login.microsoftonline.com/kmsi 重定向到 https://myapp.azurewebsites.net/.auth/login/aad/callBACk)而不是我的应用程序代码(重定向到 https://myapp.azurewebsites.net/singin-oidc) --> "Off"立>
  2. .auth/login/aad/callBACk 有效,因为我还将 https://myapp.azurewebsites.net/.auth/login/aad/callBACk 添加到我的应用注册重定向 URI --> 已删除

ValidIssuers 不足以限制用户,所以我必须在那里安装 IssuerValidator。代码现在看起来像这样

...
public void Configureservices(IserviceCollection services)
    {
        services.AddAuthentication(OpenIdConnectDefaults.AuthenticationscheR_260_11845@E)
                .AddMicrosoftIdentityWebApp(options =>
                {
                    Configuration.bind("AzureAd",options);
                    options.TokenValidationParameters = new TokenValidationParameters 
                    {   ValidateIssuer = true,IssuerValidator = ValidateSpecificIssuers
                    };
                });

...

private String[] GetAcceptedIssuers()
    {
        return new[]
        {
        "https://login.microsoftonline.com/<tenant1>/v2.0","https://login.microsoftonline.com/<tenant2>/v2.0",};
    }

public String ValidateSpecificIssuers(String issuer,SecurityToken securityToken,TokenValidationParameters validationParameters)
    {
        var validIssuers = GetAcceptedIssuers();
        if (validIssuers.Contains(issuer))
        {
            return issuer;
        }
        else
        {
            throw new SecurityTokenInvalidIssuerException("The sign-in user's account does not belong to one of the tenants that this Web App accepts users from.");
        }
    }

大佬总结

以上是大佬教程为你收集整理的无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App Services)全部内容,希望文章能够帮你解决无法限制多租户应用程序中的身份验证颁发者(Blazor Server App/OpenIDConnect/Azure App Services)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:Server