使用Azure Web Apps Auth登录用户

时间:2016-04-12 14:51:19

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

Azure Web App具有出色的全局身份验证选项 我目前正在使用Azure AD作为“身份验证提供程序”和“使用...登录”:

screenshot of azure authentication

这很好但我无法弄清楚如何获取当前登录用户的用户名(电子邮件)。我的应用程序的许多功能都有此要求 有什么想法吗?

4 个答案:

答案 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

客户端/ SPA:

通过端点:/.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端点(请参见上文)