基本用法请参考官方文档:https://identityserver4.readthedocs.io/en/latest/index.html

这里不对具体用法进行说明,一般情况下,Startup添加验证,就可以了,代码如下

            services.AddAuthorization();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "这里写验证服务器链接";
options.RequireHttpsMetadata = false;
options.ApiName = "test";
});

这里默认的验证token是取的header里面的Authorization参数

以下讨论的目的是:需要既可以从query里面获取token,也可以从header里面获取token

1. IdentityServerAuthentication

修改TokenRetriever来达到我们的要求

            services.AddAuthorization();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = Configuration["CQMSERVICE_AUTHENDPOINT"];
options.RequireHttpsMetadata = false;
options.ApiName = "vte-api";
options.TokenRetriever = request =>
{
var authorization = TokenRetrieval.FromAuthorizationHeader()(request); if (string.IsNullOrEmpty(authorization))
{
authorization = TokenRetrieval.FromQueryString("token")(request); if (!string.IsNullOrEmpty(authorization))
{
authorization = authorization.Replace("Bearer ", "");
}
} return authorization;
};
});

TokenRetriever 的默认值是TokenRetrieval.FromAuthorizationHeader(),当然如果你只需要通过query参数验证的话,可以直接赋值为TokenRetrieval.FromQueryString("token")

        /// <summary>
/// Callback to retrieve token from incoming request
/// </summary>
public Func<HttpRequest, string> TokenRetriever { get; set; } = TokenRetrieval.FromAuthorizationHeader();

2.JwtBearer

如果是JWT验证的话,就没TokenRetrieval这个属性设置了,但是可以通过设置OnMessageReceived事件来达到目的

官方源代码如下

            jwtOptions.Events = new JwtBearerEvents
{
OnMessageReceived = e =>
{
e.Token = InternalTokenRetriever(e.Request);
return JwtBearerEvents.MessageReceived(e);
}, OnTokenValidated = e => JwtBearerEvents.TokenValidated(e),
OnAuthenticationFailed = e => JwtBearerEvents.AuthenticationFailed(e),
OnChallenge = e => JwtBearerEvents.Challenge(e)
};

所以可以这么定义一下事件

            services.AddAuthorization();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateLifetime = true,//是否验证失效时间
ValidateIssuerSigningKey = true,//是否验证SECURITYKEY
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("ABCDEFG"))//SECURITYKEY
}; options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
context.Token = context.Request.Query["token"];
return Task.CompletedTask;
}
};
});

以上我个人测试是没什么问题的,如果有其他问题,欢迎留言。

 

.net core IdentityServer4 使用query参数的更多相关文章

  1. oracle EXP导出一张表时使用query参数指定where条件

    oracle exp 导出一个表的部分内容,使用query参数可加上SQL的where条件进行过滤 注意:如果需要使用到日期字符串格式等单引号,需要使用双引号将where条件括起来,而且双引号要用\做 ...

  2. .NET Core IdentityServer4实战-开篇介绍与规划

    一.开篇寄语 由于假期的无聊,我决定了一个非常有挑战性的活动,也就是在年假给大家带来一个基于OAuth 2.0的身份授权框架,它就是 IdentityServer4 ,如果没有意外的话,一定可以顺利的 ...

  3. jpa @Query()参数设置,:冒号方式、?NO.问号方式、实体类对象参数设置

    一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x  和:XX不能混 ...

  4. 《Symfony 5全面开发》教程05、http请求的query参数

    首先我们删除上节课所下的断点,在Phpstorm底部我们打开debug选项卡.点击这个按钮展开所有的PHP断点,选中之后点击这个删除,然后我们关闭xdebug监听. 回到浏览器刷新页面,当我们的浏览器 ...

  5. 路由的query参数(传参)

    路由组件不会在组件里面放自己组件标签. 案例使用嵌套组件的,但是在Message组件下新增了组件Detail.vue index.html //引入bootstrap.css <link rel ...

  6. .NET Core IdentityServer4实战 第三章-使用EntityFramework Core进行持久化配置

    内容:本文带大家使用IdentityServer4进行使用使用EntityFramework Core进行配置和操作数据 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 前两章内容 ...

  7. .NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据

    内容:本文带大家使用IdentityServer4进行对API授权保护的基本策略 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 本文将要讲述如何使用IdentityServer4 ...

  8. Core Mvc传值Query、Form、Cookies、Session、TempData、Cache

    1.传值方法 使用Request的方法(1-3): 1)Query:获取链接?后面的值 如:http://localhost:55842/Home/About?name=kxy public IAct ...

  9. ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)

    业务场景: 在 ASP.NET Core 项目中,所有的代码都是骆驼命名,比如userName, UserName,但对于 WebApi 项目来说,因为业务需要,一些请求.查询和响应参数的格式需要转换 ...

随机推荐

  1. LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...

  2. UVALive 7511 L - Multiplication Table 数学模拟题,暴力

    给定一副表,问其是否合法. 思路:当全部是?的时候,是合法的. 如果不是,那么,就找到一个数字,把它拆成若干个a*b的形式,去判断其它点是否合法即可. 拆分数字的时候,只需要枚举到sqrt(n),因为 ...

  3. 【密码学】DES、3DES

    文章1: 这一篇文章要解决数据加密——数据补位的问题.DES算法的两种模式ECB和CBC问题以及更加安全的算法——3DES算法. 一.数据补位 DES数据加解密就是将数据按照8个字节一段进行DES加密 ...

  4. pat1034. Head of a Gang (30)

    1034. Head of a Gang (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue One wa ...

  5. android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)

    ListView和ScrollView都存在滚动的效果,所以一般不建议listView和scrollView进行嵌套使用,但有些需求则需要用到两者嵌套.在android的学习中学了一种事件分发处理机制 ...

  6. android 开发AlertDialog.builder对话框的实现

    AndroidAPI提供了Dialog对话框控件,但google明确指出不建议开发者只是使用Dialog来创建对话框,而应该自定义对话框或者使用API中提供的Dialog的子类,如AlertDialo ...

  7. Mercurial(HG) Windows+Eclipse安装、配置、使用

    Mercurial(HG) Windows客户端安装 Mercurial(HG): http://mercurial.selenic.com/ Windows客户端下载:http://mercuria ...

  8. IOS防作弊产品技术原理分析

    由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢! 工具环境: iPhone 6.系统版本 10.1.1IDA Pro 7.0 0x00:防作弊产品介绍 1.由于IOS系统的不 ...

  9. redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机)

    redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机) 一.概述 此教程介绍如何在windows系统中单机布置redis哨兵模式(主从复制),同时要以后台服务的模式运行.布置以脚本 ...

  10. Visual Studio 2015 终于还是装上了

    win8.1系统 vs2015.preview_ult_CHT.iso 大小4.46G, http://download.microsoft.com/download/9/9/1/99133C05-3 ...