我目前正在使用C#在ASP.NET中开发API。
一个端点需要调用另一个端点才能返回值。
public class Testcontroller : BaseApiController
{
[Authorize]
[HttpGet]
[Route("1", Name = "F1")]
public async Task<IHttpActionResult> F1()
{
return await F2(); // calls 2nd method
}
[Authorize]
[HttpGet]
[Route("2", Name = "F2")]
public async Task<IHttpActionResult> F2()
{
int I = 2;
return Ok(I.ToString());
}
}
好的,整件事的返回值为2,这绝对没问题。但是,在真实的API中,第二种方法需要检索有关用户的一些数据。通常用
处理var Name = ClaimsPrincipal.Current.Identity.Name;
var CurrentUser = await this.AppUserManager.FindByNameAsync(Name);
这两行通过承载令牌获取用户信息,通过授权过程传递给方法。
考虑到这一点,第一个函数可以调用另一个函数。缺点是这两个用户数据的LOC不起作用,因为这个令牌没有正确传递。
您如何建议解决此问题?我考虑添加一个可选参数并通过它传递CurrentUser。但我认为这可能会在安全方面造成一些问题?
感谢您的帮助!
答案 0 :(得分:1)
首先不要使用ClaimsPrincipal.Current。在控制器中,您有一个用户属性,即身份所在的位置。 ClaimsPrincipal.Current是.NET 3.5的遗留问题。如果您要迁移到.NET Core,那么User属性是正确的方法。
在回答您的实际问题时,将其传递给控制器以外的其他功能没有任何安全问题。