gpt4 book ai didi

c# - Web API 中的自定义 IAuthenticationFilter 和 AllowAnonymous

转载 作者:太空狗 更新时间:2023-10-29 20:09:54 25 4
gpt4 key购买 nike

我想使用 AllowAnonymous 和自定义 AuthenticationFilter。有人可以指出我使用 AllowAnonymous 或其他替代方法的正确方向吗?谢谢

我创建了自己的自定义过滤器,它继承自 System.Attribute 并实现了 System.Web.Http.Filters.IAuthenticationFilter

 public class MyCustomAuthenticationAttribute : Attribute, IAuthenticationFilter

我已经能够成功地为 AuthenticateAsync 方法添加逻辑

 public async Task AuthenticateAsync(
HttpAuthenticationContext context,
CancellationToken cancellationToken) {}

我的问题是我需要忽略我的一些 Web API Controller 操作或 Controller 。我想我可以使用 System.Web.Http.AllowAnonymousAttribute 来做到这一点。例如,这是一个显示意图的非常简单的示例。

[MyCustomAuthentication]
public class HomeController : ApiController
{
// no authentication needed allow anonymous
[HttpGet]
[Route("hianonymous")]
[AllowAnonymous]
public IHttpActionResult Hello(string name) {
return Ok(new { message = "hello " + name });
}

// needs to be authenticated
[HttpGet]
[Route("hiauthenticated")]
public IHttpActionResult Hello() {
var name = User.Identity.Name;
return Ok(new { message = "hello authenticated user " + name });
}
}

问题是 Authenticate() 仍然在 MyCustomAuthenticationAttribute 上调用。我想使用 AllowAnonymous 或其他一些方法来完成此操作。感谢您的任何输入。

我知道我可以在操作级别而不是 Controller 级别使用我的自定义身份验证属性,但在某些情况下我想要整个 Controller 甚至作为全局过滤器,所以我需要能够排除单个操作或 Controller 基础。

最佳答案

如果IAuthenticationFilter 的实现没有找到它无法识别的Authorization 方案,则它应该NOTHING

http://www.asp.net/web-api/overview/security/authentication-filters

// 2. If there are no credentials, do nothing.
if (authorization == null)
{
return;
}

// 3. If there are credentials but the filter does not recognize the
// authentication scheme, do nothing.
if (authorization.Scheme != "Basic")
{
return;
}

这个想法是您的过滤器只是一种使用已知方案AUTHENTICATE的方法。

您仍然需要使用内置的 AuthorizeAttributeAllowAnonymousAttribute 来控制AUTHORIZATION

关于c# - Web API 中的自定义 IAuthenticationFilter 和 AllowAnonymous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com