我有一个API和客户端,我使用Identity Server的快速入门创建了它,并且它在工作。 在配置文件中,我有一个叫做api1的API,我把它设置为我创建的一个叫做Admin的用户的允许范围。 反过来,这允许我在API项目中调用名为IdentityController的控制器。 这将返回一些关于索赔的数据。 效果很好。 我添加了一个名为MsgController的新控制器,并授权,它可以被顺利调用。 然而我需要一些指导。
理想情况下,我需要创建一个有两个登录的测试,并显示他们不能基于他们的作用域访问另一个控制器。 我以为作用域的名称会与控制器的名称相关联,但情况似乎并非如此。 我想这是我对如何将作用域应用到api的理解不够。
谢谢,我有一个API和客户端,我想把它应用在API上。
你只需要使用策略来限制控制器。
在你的startup.cs中 ConfigureService()
添加以下扩展
services.AddAuthorization(options =>
{
//policy1
options.AddPolicy("api1Policy", builder =>
{
builder.RequireClaim("scope", "api1");
});
//policy2
options.AddPolicy("api2Policy", builder =>
{
builder.RequireClaim("scope", "api2");
});
});
对于更复杂的策略验证,您可以使用。builder.RequireAssertion();
在你的控制器中添加这样的注释。
[Authorize(Policy = "api2Policy")]
public class MsgController: Controller
{
//Users with api2 scope will be allowed in here. Likewise, do the same for others.
}