IdentityServer4实现.Net Core API接口权限认证(快速入门)

关于IdentityServer4实现.Net Core API接口权限认证的完整攻略,可以参考以下步骤:

第一步:安装IdentityServer4

在.NET Core项目的Package Manager Console中执行以下命令:

Install-Package IdentityServer4

第二步:创建IdentityServer4配置

在.NET Core项目中创建名为“Config”的文件夹,并在该文件夹中添加名为“IdentityServerConfig.cs”的类。在这个类中可以定义IdentityServer4的配置信息,包括ApiResources、ApiScopes、Clients以及IdentityResources等。示例如下:

public static class IdentityServerConfig
{
    public static IEnumerable<ApiResource> GetApiResources()
    {
        return new List<ApiResource>
        {
            new ApiResource("api", "My API")
        };
    }

    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
        {
            new Client
            {
                ClientId = "client",
                AllowedGrantTypes = GrantTypes.ClientCredentials,
                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
                AllowedScopes = { "api" }
            }
        };
    }
}

第三步:启用身份认证

在.NET Core项目的Startup.cs文件中配置如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddAuthentication("Bearer")
        .AddJwtBearer("Bearer", options =>
        {
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;
            options.Audience = "api";
        });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

其中,.AddAuthentication("Bearer").AddJwtBearer()方法表示使用Bearer Token验证,.AddJwtBearer()方法中的Authority属性指示IdentityServer的地址,Audience属性表示API的名称。

第四步:添加Authorization属性

在.NET Core项目中的Controller或者Action上增加Authorization属性,可以通过该属性指定接口的权限等级。示例如下:

[ApiController]
[Route("[controller]")]
[Authorize(Roles = "admin")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        // ...
    }
}

其中,[Authorize(Roles = "admin")]表示该接口只允许admin权限的用户访问。

示例1:授权访问

请求地址:http://localhost:5000/connect/token

请求方式:POST

请求参数:

client_id:client
client_secret:secret
grant_type:client_credentials
scope:api

返回的结果中会包含access_token字段,验证接口时,在请求时的headers中加入Bearer Token即可,格式为:Authorization: Bearer {access_token}

示例2:请求未被授权的接口

如果当前用户没有接口的访问权限,则会收到401错误。需要在错误页面中提醒用户升级权限才能访问当前接口。可以通过.NET Core自带的StatusCodePages或者自行编写错误中间件来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IdentityServer4实现.Net Core API接口权限认证(快速入门) - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 轻松学习C#的密封类

    当你想要将一个类定义为不可继承时,你可以将这个类标记为密封类。C#中的密封类与Java中的final类相似,不允许其他类继承它。 如何定义一个密封类? 在C#中,我们可以通过在类的前面添加 sealed 关键字来定义一个密封类。例如: sealed class MySealedClass { // 类定义 } 密封类的特点 密封类不能被其他类继承。 密封类一…

    C# 2023年5月15日
    00
  • 基于C# 写一个 Redis 数据同步小工具

    下面我会详细的介绍“基于C# 写一个 Redis 数据同步小工具”的完整攻略: 简介 Redis是一种基于内存的数据结构存储系统,常用于缓存、消息队列和数据存储等场景。在不同的应用场景中,我们经常需要将 Redis中的数据同步至其他系统。本文将介绍使用C#编写一个Redis数据同步小工具。 安装 Redis 首先需要在本地安装Redis,Redis官网上提供…

    C# 2023年5月31日
    00
  • 如何使用C#从word文档中提取图片

    要从Word文档中提取图片,可以使用C#语言中的Microsoft Office Interop库来实现。这个库提供了访问Office文件和应用程序的接口,可以用于创建、读取、编辑和保存Word文档等各种操作。这里我们将讲解如何使用C#从Word文档中提取图片,具体步骤如下: 步骤1:引用Interop库 首先,需要设置项目的引用,以便可以在C#中使用Off…

    C# 2023年6月6日
    00
  • c#线程Thread示例

    好的。我们先来讲解一下c#线程的概念。 c#线程是指在一个程序中独立运行的执行路径。可以同时运行多个线程,每个线程都是独立运行的,互不干扰。它可以帮助我们完成一些比较复杂的并发操作,例如同时下载多个文件、多线程爬虫、多线程计算等。 下面我们来看一些示例。 示例一:创建线程 在c#中,我们可以通过Thread类创建线程。下面是一个简单的示例: using Sy…

    C# 2023年5月15日
    00
  • Linux系统docker部署.net core3.1的详细步骤

    Linux系统docker部署.net core3.1的详细步骤 在Linux系统上使用Docker部署.NET Core 3.1应用程序是一种非常方便的方式。在本攻略中,我们将介绍如何在Linux系统上使用Docker部署.NET Core 3.1应用程序的详细步骤。 步骤一:安装Docker 首先,需要在Linux系统上安装Docker。可以使用以下命令…

    C# 2023年5月17日
    00
  • AOP从静态代理到动态代理(Emit实现)详解

    AOP从静态代理到动态代理(Emit实现)详解 概述 AOP(面向切面编程)是一种程序设计思想,可以在不改变原有代码逻辑的情况下,通过在程序中动态地新增一些逻辑代码,来实现例如日志记录、权限控制、性能监测等功能。而在 AOP 中,一个被增强的方法称为“切入点”,对该切入点进行增强的代码称为“切面”。 在实现 AOP 功能时,静态代理和动态代理是两种比较常见的…

    C# 2023年6月6日
    00
  • .NET 个人博客系统

    前言 之前通过github学习了一个.net core的博客项目,最近也是完成了博客的备案,完善了一下。该项目是传统的MVC项目,可以进行主题的切换,采用Bootstrap进行前台页面的展示,有配套的后台管理系统,可以解析Markdown文件。 参观地址 ZY知识库可以将个人的意见评论到该文章,我可以采纳采纳。 采用技术 后端:.NET Core ORM:E…

    C# 2023年4月18日
    00
  • string类的使用方法详解

    string类的使用方法详解 什么是string类 string是c++STL中的一个类,用来存放字符串。它是C++的标准库中的一员,被定义在头文件中。与字符数组相比,string类具有动态性、可扩展性和自动管理内存等优点。 string类的基本用法 头文件引入 要使用string类,我们需要在C++代码中引入头文件 #include <string&…

    C# 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部