我可以从服务器端的不记名令牌中检索用户信息 -- web api 2 吗?

Can I retrieve userinfo from bearer token on server side -- web api 2?

这是我的场景:我有一个 MVC 网络应用程序和 Web API。 Web 应用程序调用 Web api 以获取来自服务器的 saving/retrieving 数据。

假设这是一个 question/answer 网站。现在我有一个 API 如果我提供用户名和密码,它会给我用户 ID。但是网站上还有其他区域,很容易检索其他用户的用户名。我将用户 ID 保存在会话存储中,并在需要时将其发送到 POST 对象中。现在任何用户都可以在会话存储中调整该用户 ID,并且他们可以代表其他用户 post question/answer。

我该如何预防?我正在考虑的一种方法,但不确定这是否是可行的解决方案 - 我们可以从服务器端提供的不记名令牌中检索用户 ID 吗?

一旦您使用资源所有者凭据流在 Web API 中建立基于令牌的身份验证,并且当您使用 [Authorize] 保护控制器时,您当然可以这样做。您将发送到此受保护端点的有效承载令牌将创建 ClaimsPrincipal 主体(身份)对象,用户存储在其中,您可以获得如下用户名:

[RoutePrefix("api/Orders")]
public class OrdersController : ApiController
{
    [Authorize]
    [Route("")]
    public IHttpActionResult Get()
    {
        ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;

        var Name = ClaimsPrincipal.Current.Identity.Name;
        var Name1 = User.Identity.Name;

        return Ok();
    }

}

有关此的更多详细信息,您可以阅读我关于此的详细帖子 topic here