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日

相关文章

  • unity 切换场景不销毁物体问题的解决

    下面是详细讲解 “Unity切换场景不销毁物体问题的解决” 的完整攻略。 问题描述 在Unity中,切换场景时,场景中的物体通常都会被销毁并重新创建。但是,在某些情况下,我们希望在切换场景时不销毁某些物体,例如UI、游戏内人物等。那么该如何解决这个问题呢? 解决方法 方法一:使用DontDestroyOnLoad() Unity提供了DontDestroyO…

    C# 2023年6月3日
    00
  • C# 7.0 使用下划线忽略使用的变量的原因分析

    C#7.0使用下划线忽略使用的变量的原因分析 在C#7.0中,我们可以使用一个特殊的下划线符号(_)来忽略我们不需要使用的变量,这在代码中并不会引起编译器的警告或错误提示,那么为什么需要使用这个符号,本文将对此进行详细讲解。 忽略变量的原因 在我们的应用程序和代码中,常常会出现我们所不需要的变量、返回值或者方法参数,但在某种情况下,我们又不得不使用这些变量或…

    C# 2023年5月15日
    00
  • C#操作注册表之Registry类

    有关于C#操作注册表的基本操作,我们可以使用C#自带的Registry类来实现。Registry类封装了创建、读取、修改、删除注册表中的键值等基本操作,并且提供了多个静态方法和属性,方便我们能够快速的实现对注册表的操作。 一、Registry类的命名空间和引用 在使用Registry类的时候,需要在代码文件中引用Registry类所在的命名空间。具体命名空间…

    C# 2023年6月7日
    00
  • C# 获取系统字体的示例代码

    获取系统字体是C#语言中常见的操作之一,可以通过以下步骤和示例代码来完成。 步骤一:导入字体库 在C#中,需要导入System.Drawing.Text的命名空间,该命名空间包含了查找系统字体的类和方法。可以在代码中使用“using System.Drawing.Text;”对该命名空间进行导入。 using System.Drawing.Text; 步骤二…

    C# 2023年5月15日
    00
  • C#设计模式之职责链模式示例详解

    C#设计模式之职责链模式示例详解 什么是职责链模式 职责链模式是一种行为型模式,它能够将一个请求沿着多个对象链状传递,直到有一个对象处理该请求为止。这样的设计模式可以避免请求发送者与接收者之间的耦合,使得多个对象都有可能接收请求并处理它。 职责链模式的结构 这种模式通常包含一个抽象的处理者类,多个具体的处理者类,每个处理者类都包括一个指向下一个处理者的引用,…

    C# 2023年6月3日
    00
  • C#进程监控方法实例分析

    C#进程监控方法实例分析 本攻略将介绍如何在C#中实现进程监控。我们将介绍两种方法,一种是使用System.Diagnostics命名空间,另一种是使用WMI。 使用System.Diagnostics命名空间 第一步:引用命名空间 为了使用System.Diagnostics,我们必须在代码中引用该命名空间: using System.Diagnostic…

    C# 2023年6月6日
    00
  • C#线程池用法详细介绍

    C#线程池用法详细介绍 什么是线程池 线程池是一种维护和重复利用多个线程的机制,这些线程可以在程序中被多次调用。线程池是一种可管理的线程资源方式,可以有效地管理线程,提高程序运行的效率以及性能。 C#线程池用法 C#线程池是通过ThreadPool类实现的,ThreadPool类在.NET Framework中是一个静态类。在使用线程池时,需要考虑以下几个方…

    C# 2023年5月31日
    00
  • C#使用NPOI对Excel数据进行导入导出

    下面就给大家详细讲解一下“C#使用NPOI对Excel数据进行导入导出”的完整攻略。 一、NPOI是什么? NPOI是一个跨平台的第三方.xls和.xlsx格式操作组件库,适用于.NET平台,可以方便地读取、创建和编辑Excel文件,提供了针对Excel文件的内存读写支持,支持xls、xlsx、doc、docx、ppt、pptx等多种Office格式。 二、…

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