【问题标题】:How to get user name when ASP.NET web api hosted as windows serviceASP.NET web api作为windows服务托管时如何获取用户名
【发布时间】:2016-01-08 03:35:21
【问题描述】:

我们正在运行一个asp.net mvc应用程序(客户端-用户通过浏览器访问此应用程序),它利用HttpClient类调用asp.net web api应用程序(服务器-我想访问用户信息用户。调用客户端应用程序的人)。这是一个内部网应用程序。我们将 asp.net web api 作为 Windows 服务托管。在这种情况下如何获取用户名?

ApiController 类有一个属性public IPrincipal User { get; }。我看了这个属性,这就是我得到的:

User.Identity.AuthenticationType = ""; User.Identity.IsAuthenticated = false; User.Identity.Name = ""

是否可以通过这种设置从User.Identity 获得一些有效值?

【问题讨论】:

  • 有点取决于您的用户是谁...谁将连接到该服务?或者您只是想要登录到运行服务的 PC 的用户的用户名?
  • 您在这两个应用程序中的哪个应用程序中执行此操作?您如何对该应用程序进行身份验证?
  • @Grantly:我想要调用客户端应用程序(asp.net mvc app)的用户的用户名。然后,客户端应用程序调用作为 Windows 服务托管的 asp.net Web api 服务。
  • @David:用户在asp.net mvc application 中进行了身份验证。此应用程序使用 Windows 身份验证,稍后此应用程序使用 HttpClient 类调用 asp.net Web api 应用程序。我希望用户名在@asp.net web api 端(服务器端)可用,而无需使用HttpClient 类来发布该信息。我不知道我能不能做到这一点。

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


【解决方案1】:

这取决于您想要哪个用户,运行网站服务/应用程序池(例如网络服务)的用户,还是登录您网站的经过身份验证的用户。假设您有用户登录并在 IIS 中设置了身份验证,这可能会传递凭据,然后您可以在 API 中提取这些凭据。

using (HttpClient httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))

没有一大堆细节很难确定。

【讨论】:

  • 我想要使用浏览器实际运行客户端应用程序的用户凭据,而不是服务帐户或应用程序池的身份。你是说当我初始化 HttpClientHandler 时,我应该这样做 using (HttpClient httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true })) 使用 UseDefaultCredentials = true 会成功吗?
  • 用户登录到网站了吗?还是启用了集成身份验证?
  • 我在上面看到了您的评论 - 如果用户使用 windows auth 进行身份验证,则此代码可能对您有用。它可以在我的小网站上传递信用,但我们的 web api 也由 IIS 托管。它不是一个单独的服务(我们使用集成的身份验证,而不是登录)。但我以“nikki”身份登录,它会将“nikki”传递给 web api 以记录内容。试一试您的服务,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2023-01-31
  • 1970-01-01
  • 2017-10-14
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多