首页 > 其他分享 >关于Claims Transformation的问题

关于Claims Transformation的问题

时间:2023-03-25 15:23:59浏览次数:47  
标签:false 方式 demo token 关于 ocelot TokenValidationParameters Claims Transformation

原文关于Claims Transformation 看的有点不明白的,可以参考这篇文章的翻译:https://www.cnblogs.com/irocker/p/Ocelot-claimstransformation.html

这里主要记录一下我遇到的过的一个坑。

 我的项目的结构如上图所示。前端调用网关,网关调用admin服务的登录接口获取token,然后调用demo服务,demo怎么获取登录后的用户ID呢?

看官网的Claims Transformation这章,有三种方式:

1、AddClaimsToRequest
2、AddHeadersToRequest
3、AddQueriesToRequest
2和3这种方式比较简单,只要在ocelot配置中配置好。第一种方式有点坑,是需要在代码处理的,开始以为也只要在ocelot.json中配置就好了。
下面说说第一种方式,
第一步:看官网说需要在ocelot.json配置添加如下图选中的配置,其实并不需要,因为他是通过第二步解析token获取sid,然后赋值给claim。有知道直接配置ocelot.json就可以在demo服务中的claim获取sid,还请赐教。

 下图是创建token时,关于Claim的部分:

第二步:在demo服务中的main方法中添加如下代码:

 builder.Services.AddAuthentication(x =>
 {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata = false;
                x.SaveToken = true;
                x.TokenValidationParameters = CreateTokenValidationParameters();
            });
  private static TokenValidationParameters CreateTokenValidationParameters() //we ignore token validation because gateway validates it
        {
            //参考文章:https://github.com/ThreeMammals/Ocelot/issues/396#issuecomment-579719589
            var result = new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateIssuerSigningKey = false,
                SignatureValidator = delegate (string token, TokenValidationParameters parameters)
                {
                    var jwt = new JwtSecurityToken(token);
                    return jwt;
                },
                RequireExpirationTime = true,
                ValidateLifetime = true,
                ClockSkew = TimeSpan.Zero,
                RequireSignedTokens = false
            };
            return result;
        }

第三步:在就可以在demo服务中通过claim获取到用户ID

 

 第一种方式到此结束。接下说说第二种方式:

第一步:在ocelot.json添加如下配置:

 

 然后我们就可以demo服务中controller的action中看到sid的值。不需要第一种方式中的第二步和第三步的代码。

 

 第二种方式是不是特别简单,推荐使用这种方式,不过不推荐在公网上公开这个服务。第三种方式,就不啰嗦了。

 

 

 

标签:false,方式,demo,token,关于,ocelot,TokenValidationParameters,Claims,Transformation
From: https://www.cnblogs.com/koeltp/p/17254764.html

相关文章

  • 关于ESXi 8 + Debian 11的VMware Tools安装
    问题描述今天登录vCenter查看虚拟机的时候,发现除了debian虚机的VMwareTools状态栏写着“未知”:查看虚拟机摘要的时候,发现“VMwareTools正在运行,版本:11333(客户机......
  • 关于CRC校验的解释
    CRC校验(循环冗余校验)CRC即循环冗余校验码(CyclicRedundancyCheck):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查......
  • 关于dependencies和devDependencies
    devDependencies——本地开发环境使用的依赖dependencies——线上生产(发布)环境使用的依赖dependencies的包不仅开发环境能使用,生产环境也能使用,所以如果不考虑优......
  • 关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)
    关于aws-s3-bucket-静态网站托管相关的查询,这里笔者主要整理一下基于AWSSDKforPython(Boto3)方式,相关的判断和逻辑1、首先是判断s3-bucket有没有开启静态网站托管,即页......
  • 关于go-vendor和go-mod
    govendor在这个时间节点来讲的话,可能有些古典的气质了。govendor依旧在gomod的架构来讲,=gomodvendor这个是当时依赖于goland这个ide的环境中,默认会生成对应当前项......
  • 关于 SAP UI5 应用 render2 实例异步创建的编码实现
    本文是笔者这篇教程的详细解释:SAPUI5应用开发教程之五十四-如何将本地SAPUI5应用配置到本地FioriLaunchpad中默认的async标志位为false:默认的renderer名称......
  • 关于 SAP UI5 接口 sap.ui.core.IAsyncContentCreation 的问题讨论
    SAPUI5接口sap.ui.core.IAsyncContentCreation是一种异步内容创建接口,用于延迟创建UI元素。在SAPUI5中,UI元素通常是使用XML视图或JS视图创建的,这些视图可以在页面加载......
  • 自《编程的逻辑》一书关于类设计原证的思考
    类设计常归于SOLIP原则,虽然早有耳闻,但是一直未曾探其究竟,最近看这本书看到了作者相关的理解,遂加上自己的理解做为笔记。 1、S-SRP单一职责原则书中关于此原则讲解①......
  • 关于 SAP UI5 应用 render2 实例异步创建的编码实现
    本文是笔者这篇教程的详细解释:SAPUI5应用开发教程之五十四-如何将本地SAPUI5应用配置到本地FioriLaunchpad中默认的async标志位为false:默认的rendere......
  • 1.关于等价代换总结
    等价代换何时该用其实这还是比较纠结的问题在书中一般只阐述了乘除法,武的书添加了部分加减法,(加减和不为零),具体原因没有给出,然后做题又有指数形式,武说指数没有定义定义,......