IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

 

1.使用Hybird Flow保护Asp.Net Core MVC 客户端

并访问被保护资源

刷新Access Token

处理Claim

基于策略的权限

授权端点

重定向端点

Token端点

主要授权方式

OpenID Connect Flows

 OpenId Connect Flows Response Type

 response_type=code id_token

 

response_type=code token

 

 response_type=code id_token

 

 请求格式

 

 响应格式

 

2.Claim 角色授权

2.1Idp工程代码配置

(1)TestUser自定义Cliam Role

(2)Identity认证资源配置Role

 (3)Mvc客户端配置可以访问的资源roles

 

 

2.2Mvc客户端工程配置

(1)当没有权限时增加跳转页面

(2)增加需要访问的roles资源并且将Cliam的Role和Mvc的Role进行映射

(3)将特性加到Controller或者Method上进行权限验证

 

 

3.受保护的Claims

 

 

3.基于策略授权(PBAC)

3.1Idp工程配置

(1)给用户增加Claim标识

 (2) 在认证资源、api资源和客户端进行访问配置

 

 

3.2 Mvc客户端配置

3.2.1客户端增加访问资源配置

 

3.2.2自定义策略认证并且注入服务

复制代码
    public class SmithInSomewareRequirement : IAuthorizationRequirement
    {
        public SmithInSomewareRequirement()
        {

        }
    }
    public class SmithInSomewhereHandler : AuthorizationHandler<SmithInSomewareRequirement>
    {
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
            SmithInSomewareRequirement requirement)
        {
            //var filterContext = context.Resource as AuthorizationFilterContext;
            //if (filterContext == null)
            //{
            //    context.Fail();
            //    return Task.CompletedTask;
            //}

            var familyName = context.User.Claims.FirstOrDefault(c => c.Type == JwtClaimTypes.FamilyName)?.Value;
            var location = context.User.Claims.FirstOrDefault(c => c.Type == "location")?.Value;

            if (familyName == "Smith" && location == "somewhere" && context.User.Identity.IsAuthenticated)
            {
                context.Succeed(requirement);
                return Task.CompletedTask;
            }

            context.Fail();
            return Task.CompletedTask;

            // 一个Handler成功,其它的Handler没有失败 => Requirement被满足了
            // 某个Hanlder失败 => 无法满足Requirement
            // 没有成功和失败 => 无法满足Requirement
        }
    }
View Code
复制代码

3.2.3策略授权

将特性加到Controller或者Method中

 

posted @   peng_boke  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示