转自大佬Blazor与IdentityServer4的集成(六)_blazorserver microsoft.aspnetcore.identity.core_65号腕的博客-CSDN博客

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
    .AddCookie("Cookies")
    .AddOpenIdConnect("oidc", options =>
    {
        //...
        //添加以下代码
        //指定从Identity Server的UserInfo地址来取Claim
        options.GetClaimsFromUserInfoEndpoint = true;
        //指定要取哪些资料(除Profile之外,Profile是默认包含的)
        options.Scope.Add("role");
        options.Scope.Add("permission");
        //这里是个ClaimType的转换,Identity Server的ClaimType和Blazor中间件使用的名称有区别,需要统一。
        options.TokenValidationParameters.RoleClaimType = "role";
        options.TokenValidationParameters.NameClaimType = "name";
        options.Events.OnUserInformationReceived = (context) =>
            {
                //回顾之前关于WebAssembly的例子,涉及到数组的转换,这里也一样要处理

                ClaimsIdentity claimsId = context.Principal.Identity as ClaimsIdentity;

                var roleElement = context.User.RootElement.GetProperty("role");
                if (roleElement.ValueKind == System.Text.Json.JsonValueKind.Array)
                {
                    var roles = context.User.RootElement.GetProperty("role").EnumerateArray().Select(e =>
                    {
                        return e.ToString();
                    });
                    claimsId.AddClaims(roles.Select(r => new Claim("role", r)));
                }
                else
                {
                    claimsId.AddClaim(new Claim("role", roleElement.ToString()));
                }

                var permissionElement = context.User.RootElement.GetProperty("permission");
                if (permissionElement.ValueKind == System.Text.Json.JsonValueKind.Array)
                {
                    var permissions = permissionElement.EnumerateArray().Select(e =>
                    {
                        return e.ToString();
                    });
                    claimsId.AddClaims(permissions.Select(p => new Claim("permission", p)));
                }
                else
                {
                    claimsId.AddClaim(new Claim("permission", permissionElement.ToString()));
                }


                return Task.CompletedTask;
            };
    });

// 这里是基于决策的授权操作,WebAssembly的例子中有相关的说明,Blazor Server的使用方式也一样
services.AddAuthorizationCore(option =>
{
    string[] permissions = new string[]
    {
        "create",
        "retrieve",
        "update",
        "delete"
    };
    foreach (var p in permissions)
    {
        option.AddPolicy(p, policy =>
        {
            policy.RequireClaim("permission", new string[] { p });
        });
    }
});

 

posted @ 2023-09-12 14:53 ccqin 阅读(41) 评论(0) 推荐(0) 编辑
摘要: .netcore +docker 需要修改两个地方 Dockerfile 添加 ENV ASPNETCORE_URLS=http://+:44303 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base ENV ASPNETCORE_URLS=http:/ 阅读全文
posted @ 2022-09-27 10:46 ccqin 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 在网上找了好久,才找到一位俄罗斯大神写的文章。 遇到超大文件的话还是会报异常。 服务端采用webapi [Authorize] [HttpPost] public async Task<IActionResult> Post(IFormFile file) { var content = new M 阅读全文
posted @ 2022-09-08 15:21 ccqin 阅读(262) 评论(0) 推荐(0) 编辑
摘要: TightvncVNC静默安装参数文档说明详见 https://www.tightvnc.com/doc/win/TightVNC_2.7_for_Windows_Installing_from_MSI_Packages.pdf 阅读全文
posted @ 2022-01-14 10:08 ccqin 阅读(608) 评论(0) 推荐(0) 编辑
摘要: genghuanyuan https://www.codeleading.com/article/2229911499/ UOS部署 .Net Core开发环境 https://blog.csdn.net/weixin_45813250/article/details/111151270 Unhan 阅读全文
posted @ 2022-01-05 15:59 ccqin 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 最近双十一,双十二,促销多的眼花缭乱,领了n多优惠卷,为了合理凑单实在是浪费了好多时间。 于是这几天写了一个小工具,可以分析优惠卷凑单页里所有商品都参加哪些活动,这样能节约我们凑单的时间。 可以快速找到 2件5折 又同时参加 199-100 活动的商品 这样就可以开心的剁手啦 这里我借鉴了很多前辈的 阅读全文
posted @ 2018-12-21 14:19 ccqin 阅读(1794) 评论(1) 推荐(0) 编辑
摘要: 1、Win32DiskImager写入光盘镜像 2、进入omv页面 设置 ip 端口号 ,设置时间,设置ssh打开,设置会话超时时间 ××××设置 dns 很重要!! #这里用的是阿里云的DNS服务器 nameserver 223.5.5.5 nameserver 223.6.6.6 3、putty 阅读全文
posted @ 2018-01-23 14:46 ccqin 阅读(2916) 评论(0) 推荐(0) 编辑
摘要: https://www.toutiao.com/i6447470450145493517/ https://www.technikaffe.de/anleitung-402-howto_nextcloud_unter_openmediavault_3_inkl._fail2ban 阅读全文
posted @ 2018-01-04 15:40 ccqin 阅读(3024) 评论(0) 推荐(0) 编辑
摘要: https://www.cnblogs.com/feng18/p/5148985.html 通常的排查方法如下: 1、查看php fastcgi的进程数(max_children值) # netstat -anop | grep php-cgi | wc -l# netstat -anpo | gr 阅读全文
posted @ 2018-01-04 15:39 ccqin 阅读(2735) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.csdn.net/huangyezi/article/details/45274553 一个很简单的分部视图,Model使用的是列表,再来看看调用该分部视图的action [csharp] view plain copy [HttpPost] public Action 阅读全文
posted @ 2017-12-11 16:37 ccqin 阅读(601) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示