【问题标题】:Get User Information while Authenticating from Azure Active Directory从 Azure Active Directory 进行身份验证时获取用户信息
【发布时间】:2016-07-28 05:10:32
【问题描述】:

我有一个为测试身份验证/授权场景而开发的 Web 表单应用程序。在创建测试项目时,我选择了“无身份验证”,它创建了我的项目以没有身份验证机制代码。我将网站发布到我的天蓝色租户,并从功能下的“身份验证/授权”启用了 Azure Active Directory 身份验证。我创建了一个指向我的 Web 应用程序的 Azure AD 应用程序。点击默认页面后,应用程序现在进行身份验证,一切似乎都正常。

但是,当我在 Visual Studio 中本地运行应用程序时,我无法获取用户信息,因为没有可用的适当标头,例如 X-MS-CLIENT-PRINCIPAL-NAME。我的下一步是调用图形 API 来获取详细的用户信息。

注意:我可以在我的 Web 项目中包含 OWIN 代码来对用户进行身份验证,但我希望对现有的本地 Windows 身份验证应用程序进行最少的代码更改。

任何帮助/指导

【问题讨论】:

  • 您是否正在查看应用程序从 Intranet 和 Internet 使用时的单点登录体验?然后你需要看看 azure AD connect。如果是 azure AD,您将使用图形 API 在本地 AD 中进行身份验证和获取用户信息等,您将使用 LDAP。
  • 可能不需要单点登录,因为我已经要求我的用户在浏览网站时输入他/她的 AD 登录凭据。我希望通过 Azure AD 对用户进行身份验证。但是,当我从 VS 运行应用程序时,我无法获取 Auth Headers 也无法获取用于调用 Graph API 的声明主体。
  • 您只是将应用程序链接到 AAD。默认页面将您带到实时登录页面,然后您从那里继续。通常的做法是在 MVC 应用程序的情况下,在控制器的 [Authorize] 属性中使用图形 API 添加身份验证/授权 ADAL 调用。然后在任何需要的地方使用通过图形 API 获得的用户信息。
  • 我的是一个网络表单应用程序。您是否有示例代码显示如何通过身份验证令牌获取用户信息表单图形 api?
  • graph api 与 objectId 一起使用,它是 AAD 中用户的唯一 id。如果 auth token 会有这个,那就不知道了。你需要检查一下。所有类型的应用程序的图形 api 代码都是相同的。

标签: azure authentication azure-web-app-service azure-active-directory


【解决方案1】:

但是,当我在 Visual Studio 中本地运行应用程序时,我无法获取用户信息,因为没有可用的适当标头,例如 X-MS-CLIENT-PRINCIPAL-NAME。我的下一步是调用图形 API 来获取详细的用户信息。

这是意料之中的。 X-MS-CLIENT-PRINCIPAL-NAME 标头(和相关标头)由在应用服务中运行的身份验证/授权模块添加。当您从 Visual Studio 本地运行时,您将没有此模块,因此不会有此请求标头。

如果您想在本地和应用服务中使用相同的代码,而不是查看请求标头,我建议使用 .NET API 来显示用户信息,例如 ClaimsPrincipal.Current.Identity.Name 。无论您是在本地使用 Windows 身份验证还是在 Azure 应用服务中使用身份验证/授权,这都应该正确填充。

您可以在此处找到有关身份验证/授权的基本机制的更多信息:https://cgillum.tech/2016/02/01/architecture-of-azure-app-service-authentication-authorization/

【讨论】:

  • 感谢您的回复。您能否指出一个使用 ClaimsPrincipal 通过 Graph API 获取用户组信息的代码示例?
  • 这里是获取组信息的 Graph API 文档:msdn.microsoft.com/en-us/library/azure/ad/graph/api/…。以下是有关如何以用户身份调用 Graph API 的一些信息(特定于身份验证/授权):cgillum.tech/2016/03/25/app-service-auth-aad-graph-api
  • 非常感谢您的帮助。我成功地通过标题获取了所需的信息。但是,有几个问题。 1) 有没有办法在 ClaimsPrincipal 中填充标头信息,例如令牌、刷新令牌等? 2) 有几次我看到,每当我通过资源管理器修改 config/authSettings 时,我都会收到错误消息,因为“您无权查看此页面”。我验证了我编辑的 json 文件格式正确,所有语法都已到位。我不得不删除该网站,重新创建它并再次进行更改。
  • 对于 1) 你问你是否可以在你的代码中做到这一点?如果是这样,当然 - 您可以将任何您想要的内容添加到 ClaimsPrincipal 中。示例: ((ClaimsIdentity)ClaimsPrincipal.Current.Identity).AddClaim(new Claim("TestClaim", "TestValue")); 2)我以前没有听说过这个问题。发生这种情况时,Azure 门户是否继续为您的站点工作?
  • 对于 1) 我的意思是,我不是在本地工作时使用 CliamsPrincipal 获取用户组信息,而是使用标头获取令牌以调用图形 api 来获取组信息,有没有一种方法可以直接获取在 claimprincipal 中自动设置的令牌和刷新令牌?我们通过资源浏览器中的 json 修改来填充标题信息的方式。对于 2)我在收到此错误后尝试了几次。所以我删除了网络应用程序并重新创建它,一切正常。我会尝试再次重现此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多