.Net6基于IdentityServer4配置服务授权以及策略授权

上一篇中,配置了认证授权服务。这篇配置接口访问时进行授权

新建一个名为Web.API.Test的.Net6项目,引用包源IdentityServer4.AccessTokenValidation

Program注入

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "http://localhost:6001";
        options.RequireHttpsMetadata = false;
        options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false };
    });
	
	
app.UseAuthentication();

添加TestController

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Web.API.Test.Controllers;

[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
    [Authorize]
    [HttpGet("GetAuthTest")]
    public IActionResult GetAuthTest()
    {
        return Ok("授权信息");
    }
}

这样认证授权配置就可以了。启动服务Ids4.ServerWeb.API.Test。先获取AccessToken,再请求接口。
image

上面的认证授权配置没有权限的概念,只要AccessToken符合认证授权服务生成的规则就可以访问接口。在实际的开发中,有些接口是只允许管理员访问的。接下来配置策略授权,改造一下上面的代码。

Program注入

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "http://localhost:6001";
        //options.Audience = "api2";
        options.RequireHttpsMetadata = false;
        options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false };
    });

builder.Services.AddAuthorization(option =>
{
    // 添加名为AdminPolicy的策略授权,检测Token中Role是否有admin
	// 可以添加多个策略
    option.AddPolicy("AdminPolicy", builder =>
    {
        builder.RequireAuthenticatedUser();
		// 可以添加多个验证
		// builder.RequireClaim(JwtClaimTypes.Scope, "api2");
        builder.RequireRole(JwtClaimTypes.Role, "admin");
    });
});

app.UseAuthentication();

TestController添加GetAdminAuthTest接口

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Web.API.Test.Controllers;

[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
    [Authorize]
    [HttpGet("GetAuthTest")]
    public IActionResult GetAuthTest()
    {
        return Ok("授权信息");
    }

    [Authorize("AdminPolicy")]
    [HttpGet("GetAdminAuthTest")]
    public IActionResult GetAdminAuthTest()
    {
        return Ok("只允许角色为admin的访问");
    }
}

用户名为zhangsan拥有admin的角色,获取到的AccessToken可以正常访问接口。lisi则不行
image
image
image
image

源码地址:https://gitee.com/nzyGetHub/Microservice2.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值