5.9K Star 11.7K Fork 4K

GVPdotNET China / Furion

 / 详情

[Bug]同时使用jwt和cookie认证是,api无法单独通过jwt进行认证,建议api与mvc分别进行jwt和cookie认证

已完成
创建于  
2020-11-22 17:52

输入图片说明
目前,启用jwt和cookie共存验证后,api也必须写入cookie后才能验证通过,可不可以分别验证一下, api 验证jwt,mvc验证cookie

评论 (3)

YaChengMu 创建了任务
YaChengMu 关联仓库设置为百小僧/Furion
百小僧 任务状态待办的 修改为进行中
百小僧 负责人设置为百小僧
百小僧 添加了
 
漏洞
标签
百小僧 添加了
 
优先
标签
百小僧 添加了
 
无法重现
标签
百小僧 添加了
 
重大调整
标签
百小僧 添加了
 
新功能
标签
百小僧 添加了
 
优化
标签
百小僧 里程碑设置为v1.0.0
百小僧 关联分支设置为master
百小僧 计划截止日期设置为2020-11-23
百小僧 计划开始日期设置为2020-11-22
百小僧 计划截止日期2020-11-23 修改为2020-11-22
百小僧 置顶等级设置为
百小僧 优先级设置为严重
展开全部操作日志

已经完成,晚上出demo。

Furion v1.0.9.1 版本

using Furion.Authorization;
using Furion.Core;
using Furion.DataEncryption;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
    /// <summary>
    /// JWT 授权自定义处理程序
    /// </summary>
    public class JwtHandler : AppAuthorizeHandler
    {
        public override Task HandleAsync(AuthorizationHandlerContext context)
        {
            // 获取当前数据库上下文
            var httpContext = context.GetCurrentHttpContext();
            var isValid = JWTEncryption.ValidateJwtBearerToken(httpContext, out var token);

            // 验证 Token 和 权限
            if ((token != null && !isValid)
                || (token == null && !context.User.Identity.IsAuthenticated)
                || !CheckAuthorzie(httpContext)) context.Fail();

            var pendingRequirements = context.PendingRequirements;

            // 通过授权验证
            foreach (var requirement in pendingRequirements)
            {
                if (requirement is AppAuthorizeRequirement)
                {
                    context.Succeed(requirement);
                }
            }

            return Task.CompletedTask;
        }

        /// <summary>
        /// 检查权限
        /// </summary>
        /// <param name="httpContext"></param>
        /// <returns></returns>
        private static bool CheckAuthorzie(DefaultHttpContext httpContext)
        {
            // 获取权限特性
            var securityDefineAttribute = httpContext.GetMetadata<SecurityDefineAttribute>();
            if (securityDefineAttribute == null) return true;

            // 解析服务
            var authorizationManager = httpContext.RequestServices.GetService<IAuthorizationManager>();

            // 检查授权
            return authorizationManager.CheckSecurity(securityDefineAttribute.ResourceId);
        }
    }
}
百小僧 任务状态进行中 修改为已完成
百小僧 置顶等级 修改为不置顶
百小僧 关联分支master 修改为未关联

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助