【问题标题】:how to access User Identity in Web Api如何在 Web Api 中访问用户身份
【发布时间】:2015-02-25 17:14:34
【问题描述】:

我在我的 MVC 应用程序中使用 web Api,我想在我的 api 中使用以下代码获取用户身份:

User.Identity.Name

但它不起作用,它在控制器等其他地方运行良好!

是否有任何解决方案可以从 Web API 访问 User.Identity.Name?

【问题讨论】:

  • 尝试使用 ApiController 属性 User 。看看这个:msdn.microsoft.com/en-us/library/…
  • 在 Web API 2 中,它已更改为 ApiController.User 属性或 RequestContext.Principal ——它们是相同的。请注意,这可能为空。

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api2


【解决方案1】:

这是一个常见的混淆。在 MVC 中进行身份验证对 Web Api 中的身份验证状态没有任何作用。 Web Api 是 REST 兼容的,这意味着它是无状态的——没有会话。

当您在 MVC 端进行身份验证时,会使用身份验证令牌将 cookie 添加到用户的浏览器,对应于应用程序会话状态中的活动身份验证(这里我不是在谈论 Session,因为身份验证没有使用 that,但它仍在使用 sessions)。然后,在每个后续请求中,浏览器都会将此 cookie 传递回服务器,服务器会验证身份验证令牌并恢复用户的“登录”状态。

在 Web Api 中,这些都不会发生。对 Web Api 的每个请求都必须包含处理该请求所需的所有信息。对之前发生的事情一无所知。因此,如果您需要授权 Web Api 请求,则必须将身份验证令牌与请求一起传递,通常在请求标头中。否则,您未通过身份验证并且 User.Indentity.Name 将为空,因为您是匿名的。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2016-12-08
    • 2016-06-07
    • 2019-02-11
    • 2018-07-30
    • 2018-11-25
    • 2020-03-30
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多