关于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技术站