Azure Web App具有出色的全局身份验证选项 我目前正在使用Azure AD作为“身份验证提供程序”和“使用...登录”:
这很好但我无法弄清楚如何获取当前登录用户的用户名(电子邮件)。我的应用程序的许多功能都有此要求 有什么想法吗?
答案 0 :(得分:12)
有几种方法可以做到这一点。如果您使用的是Azure AD和node.js,最简单的方法是查看X-MS-CLIENT-PRINCIPAL-NAME
HTTP请求标头。这将包含用户的电子邮件。
如果您想从客户端的某些JavaScript代码获取用户信息,您可以选择向网站的/.auth/me
端点发出AJAX请求。只要登录会话cookie(当前名为 AppServiceAuthSession )包含在AJAX调用中(默认情况下会发生),您将获得一个JSON blob,其中不仅包含电子邮件,还包含所有其他与用户相关的声明。这种技术也适用于服务器端。
答案 1 :(得分:1)
如果您使用带有nodejs的Passport-azuread库,则可以执行以下代码片段之类的操作:
<% if (user) { %>
<p>displayName: <%= user.displayName %></p>
<p>givenName: <%= user.name.givenName %></p>
<p>familyName: <%= user.name.familyName %></p>
<p>Full User Data</p>
<%- JSON.stringify(user) %>
<% } %>
您可以在此处找到Node的完整Azure AD示例: https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-openidconnect-nodejs/#5-create-the-views-and-routes-in-express-to-display-our-user-in-the-website
答案 2 :(得分:1)
由于@Chris的回答,我能够编写一个函数来返回登录用户的电子邮件。
public static String getEmail(HttpContext context)
{
String identifier = "X-MS-CLIENT-PRINCIPAL-NAME";
IEnumerable<string> headerValues = context.Request.Headers.GetValues(identifier);
if (headerValues == null)
{
System.Diagnostics.Debug("No email found!");
return "";
}
else {
System.Diagnostics.Debug(headerValues.FirstOrDefault());
return headerValues.FirstOrDefault();
}
}
答案 3 :(得分:1)
克里斯·吉伦({@ 3}}的重编,带有少量添加
参考:answer
通过端点:/.auth/me
axios.get("/.auth/me")
.then(r => {console.log(r.data)})
注意::只有启用了https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#access-user-claims时此端点才可用(否则将返回404)。
注意:登录会话cookie(当前名为 AppServiceAuthSession )必须包含在AJAX调用中(默认情况下发生)
A。通过HTTP请求标头:
X-MS-CLIENT-PRINCIPAL-NAME
#用户的电子邮件X-MS-CLIENT-PRINCIPAL-ID
X-MS-CLIENT-*
开头) B。通过/.auth/me
端点(请参见上文)