我正在我的身份服务器应用程序中创建一个 api 资源:
new ApiResource
{
Name = "socialnetwork",
Scopes =
{
new Scope()
{
Name = "socialnetwork.read_contents",
DisplayName = "Read"
},
new Scope
{
Name = "socialnetwork.share_content",
DisplayName = "Write"
}
}
}
但是我如何在我的社交网络 api Controller 中使用这个范围。
public class SocialController : Controller
{
[HttpGet]
public async Task<IActionResult> GetCotntents(){
}
[HttpPost]
public async Task<IActionResult> ShareCotntents(string content){
}
}
- 如果客户端有
socialnetwork.read_contents
范围,它可以访问GetCotntents()
方法。 - 如果客户端有
socialnetwork.share_content
范围,它可以访问ShareCotntents()
方法。
作用域的目的究竟是什么?我该如何使用它?
最佳答案
我相信您需要做的是为您要使用的每个范围设置一个策略(在您的 ConfigureServices 中)
services.AddAuthorization(x =>
{
x.AddPolicy("readcontents", policy =>
policy.RequireClaim("scope", "socialnetwork.read_contents"));
x.AddPolicy("shared", policy =>
policy.RequireClaim("scope", "socialnetwork.share_content"));
});
添加然后您可以使用策略在您的 api 方法上标记 Authorize 属性
[HttpGet]
[Authorize("readcontents")]
public async Task<IActionResult> GetCotntents(){
}
[HttpPost]
[Authorize("shared")]
public async Task<IActionResult> ShareCotntents(string content){
}
关于c# - 如何在资源 api 中使用 IdentityServer4 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49549594/