天天看点

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

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

并访问被保护资源

刷新Access Token

处理Claim

基于策略的权限

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

授权端点

重定向端点

Token端点

IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
主要授权方式
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
OpenID Connect Flows
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 OpenId Connect Flows Response Type
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 response_type=code id_token
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
response_type=code token
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 请求格式
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 响应格式
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

2.Claim 角色授权

2.1Idp工程代码配置

(1)TestUser自定义Cliam Role

IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
(2)Identity认证资源配置Role
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 (3)Mvc客户端配置可以访问的资源roles
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

2.2Mvc客户端工程配置

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

IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
(2)增加需要访问的roles资源并且将Cliam的Role和Mvc的Role进行映射
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
(3)将特性加到Controller或者Method上进行权限验证
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
3.受保护的Claims
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
3.基于策略授权(PBAC)
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

3.1Idp工程配置

(1)给用户增加Claim标识

IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
 (2) 在认证资源、api资源和客户端进行访问配置
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

3.2 Mvc客户端配置

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

IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
3.2.2自定义策略认证并且注入服务
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端
IdentityServer4 使用Hybird Flow保护Asp.Net Core MVC 客户端

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

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

3.2.3策略授权

将特性加到Controller或者Method中

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