使用Azure AD身份验证的自定义授权

伍特B

我正在使用ASP.NET Core 2.0开发服务结构无状态Web应用程序。此应用程序使用Azure AD对来自多个AD租户的用户进行身份验证。我要实现的是使用自己的基于角色的授权,可以使用授权用户在我的应用程序中对其进行配置。这些角色存储在我的应用程序中。

在当前的实现中,我通过使用custom添加策略来向应用程序添加授权IAuthorizationRequirement在需求授权期间,根据用户权限添加声明。这意味着声明将在登录后添加。[Authorize(Roles = "role")]属性也不起作用,因为角色声明是在登录后添加的

使用来自Azure AD的经过身份验证的用户来实现此自定义授权的正确方法是什么?

在六月

您可以在用户通过OnTokenValidated事件登录后添加自己的自定义声明

.AddOpenIdConnect(o =>
{
    Configuration.GetSection("OpenIdConnect").Bind(o);
    o.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = async ctx =>
        {
            string oid = ctx.Principal.FindFirstValue("http://schemas.microsoft.com/identity/claims/objectidentifier");

            var db = ctx.HttpContext.RequestServices.GetRequiredService<AuthorizationDbContext>();

            var objectIdGuid = Guid.Parse(oid);
            bool isSuperAdmin = await db.SuperAdmins.AnyAsync(a => a.ObjectId == objectIdGuid);
            if (isSuperAdmin)
            {
                var claims = new List<Claim>();
                claims.Add(new Claim(ClaimTypes.Role, Roles.SuperAdmin));
                var appIdentity = new ClaimsIdentity(claims, "MyTestAppIdentity");

                ctx.Principal.AddIdentity(appIdentity);
            }
        }
    };
});

作为示例,我们从数据库中检查用户是否为超级管理员。如果是这样,我们将为他们创建一个新的身份,并以必要的角色作为声明。

所有身份都在主体上组合在一起以生成其声明集,因此所有其他声明也仍然可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ember cli中使用自定义授权者和自定义身份验证器进行ember简单身份验证

使用Azure移动应用程序进行自定义身份验证

具有自定义策略的Azure AD B2C中的多租户Azure AD身份验证

具有自定义策略的Azure AD B2C:无法使用临时密码对用户进行身份验证

使用OWIN / OIDC针对Azure AD B2C对自定义Umbraco控制器进行身份验证

Azure MobileApp自定义身份验证,刷新令牌

.NET Core 2使用Azure AD进行身份验证-自定义登录页面

使用自定义ID的Firebase身份验证

在.NET Core中使用Azure AD身份验证时如何指定自定义注销URL

Azure AD身份验证后立即运行自定义方法

.NET Core 3 Azure AD身份验证的自定义角色

如何使用GraphQL自定义身份验证类?

使用Keycloak进行自定义身份验证

NET Core中如何使用自定义策略架构实现jwt令牌库身份验证以进行授权?

用户的AD身份验证失败时如何导航到“自定义访问被拒绝的页面”(带有OpenIDConnect Azure AD身份验证的.net 3.1核心)

在使用带oidc和中间件的Azure AD身份验证的Web应用程序中指定自定义redirect_uri

使用自定义身份验证修改请求参数

无法使用自定义身份验证后端登录

使用自定义SSH身份验证机制(OpenSSH)

使用JavaEE对SOAP进行自定义身份验证

Azure Apps自定义身份验证SigningKey

使用Jwt Bearer身份验证的自定义声明

使用MVC进行自定义身份验证

Azure AD B2C:是否可以以自定义形式使用用户名和密码进行身份验证

使用 Devise,如何自定义失败的身份验证?

如何在 ADFS 中使用自定义身份验证替换主要身份验证

使用 Windows 集成身份验证对自定义 api 进行身份验证

在 Laravel 6 上使用自定义身份验证

Azure 应用服务身份验证/授权和自定义 JWT 令牌