我正在我的身份服务器应用程序中创建一个api资源:
new ApiResource
{
Name = "socialnetwork",
Scopes =
{
new Scope()
{
Name = "socialnetwork.read_contents",
DisplayName = "Read"
},
new Scope
{
Name = "socialnetwork.share_content",
DisplayName = "Write"
}
}
}
但是如何在我的socialnetwork api控制器中使用这个范围。
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()
方法。实际上范围的目的是这个吗?我该如何使用它?
答案 0 :(得分:1)
我认为你需要做的是为你想要使用的每个范围设置一个策略(在你的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){
}