C# 如何仅允许管理员在identityserver4中注册新用户

C# 如何仅允许管理员在identityserver4中注册新用户,c#,authentication,.net-core,authorization,identityserver4,C#,Authentication,.net Core,Authorization,Identityserver4,我正在使用ASP.NETCore开发一个应用程序,我正在使用identityserver4作为带有角度前端的身份提供者。目前,任何人都可以访问我的IDP上的注册页面并注册为新用户。我想将此操作仅限于管理员。我怎样才能做到这一点?IDP是否也应注册为客户端,以便在用户登录后能够进行身份验证,还是一种不良做法?我愿意接受任何建议,提前谢谢 您可以在IdentityServer中使用常用的授权模式,并使用authorize属性保护注册页面,如: [Authorize("Admin"

我正在使用ASP.NETCore开发一个应用程序,我正在使用identityserver4作为带有角度前端的身份提供者。目前,任何人都可以访问我的IDP上的注册页面并注册为新用户。我想将此操作仅限于管理员。我怎样才能做到这一点?IDP是否也应注册为客户端,以便在用户登录后能够进行身份验证,还是一种不良做法?我愿意接受任何建议,提前谢谢

您可以在IdentityServer中使用常用的授权模式,并使用authorize属性保护注册页面,如:

[Authorize("Admin")]
然后只需在startup类中注册一个策略,如,并检查所需的声明,如admin,或者如我在下面的示例中所示,您的名字必须是alice:

services.AddAuthorization(options =>
{
    options.AddPolicy("Admin", policy =>
        policy.RequireAssertion(context =>
            {
                var user = context.User;

                return user.HasClaim(claim => claim.Type == "name" &&
                                              claim.Value == "alice");
            }
        ));
});

因此,您不需要将IdentityServer注册为自己的客户端。

它不工作,当我检查
var user
对象时,它没有声明。编辑:我正在发送承载令牌和请求,但IdentityServer 4将我重定向到登录您不需要向IdentityServer发送任何令牌来访问管理页面,当您登录到IdentityServer时,您将获得一个单独的会话cookie,因此您无需执行任何操作,只需检查登录的用户是否有所需的声明。看起来没有会话cookie与来自我的客户端的请求一起发送。你知道我为什么或者如何调试它吗?我已经尝试过这个解决方案,它对我非常有效: