配套源码:https://gitee.com/jardeng/IdentitySolution

接上一篇《ASP.NET Core3.1使用IdentityServer4中间件系列随笔(一):搭建认证服务器

1、创建API项目并运行。

使用API模板,API模板中自带了一个示例。

创建完成后的项目截图

设置WebApplication1为启动项,运行起来后,默认访问的是:http://localhost:5000/weatherforecast

可以看到这个api返回了一些测试数据

此时API没有受保护,可以任意访问,接下来配置IdentityServer来保护API。

2、首先添加nuget包:Microsoft.AspNetCore.Authentication.JwtBearer

3、在Startup.cs类ConfigureServices方法中,将身份验证服务添加到DI并配置Bearer为默认方案。

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(); //将身份验证服务添加到DI并配置Bearer为默认方案。
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api1";
});
}

在Configure方法中,将身份验证中间件添加到管道中,以便对主机的每次调用都将自动执行身份验证。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseRouting(); //将身份验证中间件添加到管道中,以便对主机的每次调用都将自动执行身份验证。
app.UseAuthentication();
//授权中间件,以确保匿名客户端无法访问我们的API端点。
app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

打开launchSettings.json,将项目启动端口改成6000,因为跟IdentityServer授权服务器项目端口冲突了。

在需要被保护的API控制器上添加[Authorize]特性,指定应用此属性的类或方法需要指定的授权。添加到控制器上表示访问整个控制器的所有方法都需要授权,添加到某个方法上表示访问仅此方法需要授权。

启动项目,我们看到此时接口访问不了了。

这里使用Postman来进行接口测试,出现401错误代码即未授权。说明我们的API已经受保护了。

现在我们将IdentityServer认证服务器项目启动起来,因为在同一个解决方案中,所以直接到bin/Debug/netcoreapp3.1目录下直接运行。

在上一篇中,我们添加了一个客户端,使用了认证模式为客户端凭证(ClientCredentials)

那么我们就使用这种认证方式去请求token,得到token就可以访问api了

先请求地址:http://localhost:5000/connect/token 获取token,使用POST请求,client_id、client_secret、grant_type都与上图一一对应。

然后拿着获取到的access_token去访问api,只需要在请求头Headers中添加参数:Authorization,值为:Bearer+空格+access_token,可以看到已经能成功访问到被保护的API了。

最新文章

  1. php Base64编码/解码
  2. Three.js 3D特效学习
  3. js中json与数组字符串的相互转化
  4. https大势已来?看腾讯专家如何在高并发压测中支持https
  5. LeetCode OJ 160. Intersection of Two Linked Lists
  6. boost锁的使用
  7. keynote 代码高亮
  8. unix下对于字符串变量的各种操作总结
  9. Android Aop日志
  10. 高效求a的n次幂的算法
  11. HashTable与ConcurrentHashMap的区别
  12. ES6常用语法(下)
  13. Python HTML解析模块HTMLParser(爬虫工具)
  14. 如何ASP.NET Core Razor中处理Ajax请求[转载]
  15. 如何用html把文本框外观格式设为只显示底部的横线
  16. Spring学习之路-SpringBoot简单入门
  17. 检测硬件RDMA卡是否存在
  18. ASP.NET MVC API 接口验证
  19. 使用 pjax 实现无刷新切换页面
  20. android emulator 安装中文输入法

热门文章

  1. sqlzoo - SELECT from WORLD Tutorial 答案
  2. python基础day5_元组
  3. Vue无限滚动加载数据
  4. luogu P5289 [十二省联考2019]皮配 背包
  5. java多线程的问题
  6. x86架构:从实模式进入保护模式
  7. python数据可视化编程实战PDF高清电子书
  8. Lucas(卢卡斯)定理
  9. python3.6项目:银行存取款系统
  10. 一文搞定Python正则表达式