【发布时间】:2019-12-15 21:52:13
【问题描述】:
我有一个现有的 ASP.NET Core MVC 应用程序,我想在控制器中添加一个新的 API 方法。我想尽可能少地接触认证/授权代码,所以我不想为这个 API 编写新的认证中间件。
如果用户是匿名/未知的,该方法应该返回某种类型的数据。如果用户已登录并拥有有效用户,它应该返回更具体和潜在的个人信息。
跳过 [Authorize] 属性,只检查用户名的 HttpContext.User (https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcontext.user?view=netframework-4.8) 属性是否安全?
我可以假设签名已经被 OpenID Connect 中间件验证了吗?
// No Authorize attribute
public IActionResult MyApi()
{
string userName = System.Security.Claims.Claim idClaim = this.HttpContext.User?.Claims?.FirstOrDefault(a => a.Type == "sub")?.Value;
// Can I assume that the User object only is non-null if the OAuth signature is actually verified?
// Or is fake-cookies possible?
}
【问题讨论】:
-
如果您希望匿名用户访问 API,那么只需使用
HttpContext.User.Identity.IsAuthenticated。就是大家的意思!但是,如果您需要不同类型的经过身份验证的用户收到不同类型的响应,那么我认为您应该使用策略。
标签: c# asp.net-core model-view-controller asp.net-core-mvc authorization