0

我们有一个使用 Windows 身份验证和基于声明的身份的 ASP.NET Core API。API 有一个具有多个操作的控制器。Actions 有不同的授权策略。

[Authorize(Policy = "Read")]
[HttpGet]
public async Task<ActionResult<Item>> Read()
{ ... }

[Authorize(Policy = "Write")]
[HttpPost]
public async Task<ActionResult<Item>> Write(Item item)
{ ... }

在 Startup.cs 我们有这个:

services.AddAuthorization(options => {
  options.AddPolicy("Read", policy => policy.RequireClaim("OurReadType","OurReadValue"));
  options.AddPolicy("Write", policy => policy.RequireClaim("OurWriteType","OurWriteValue"));
});

我们还有一个使用这个 API 的前端。当前端应用程序访问我们的 API 时,一切正常。如果用户拥有读取声明,则他们只能访问读取操作,写入操作也是如此。当只有读取声明的用户尝试调用写入操作时,他们将收到 401 Unauthorized。这都是预期的行为。到目前为止没有问题。

当我们尝试从 Postman 访问我们的 API 时,问题就开始了。只有从邮递员那里我们才能得到 403 Forbidden 错误。

Postman 配置为使用我的个人用户名和密码使用 NTLM 身份验证。而且我的帐户有读写声明。

如果我们[Authorize(Policy = "Read")]从动作中删除注释,我们在使用 Postman 调用该动作时将不再收到 403 错误。这让我认为问题出在邮递员和基于索赔的授权上。

有人知道问题是什么吗?我对基于声明的身份以及在这种程度上使用 Windows 身份验证还很陌生。所以任何帮助表示赞赏。

4

0 回答 0