在ASP.net中阅读Azure AD登录用户详细信息

时间:2016-03-02 14:40:19

标签: asp.net azure azure-active-directory

我正在asp.net(VS 2013)中实现Azure AD登录。
我已成功创建登录和注销部分..

我的签名和签名方法如下所示。

public partial class Startup
{      

    private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];

    private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];

    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];

    private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];

    string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context => 
                    {
                        context.HandleResponse();
                        context.Response.Redirect("/Error?message=" + context.Exception.Message);
                        return Task.FromResult(0);
                    }
                }
            });
    }
}

public void SignIn()
    {

        if (!Request.IsAuthenticated)
        {                HttpContext.Current.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
    }

    public void SignOut()
    {          
        HttpContext.Current.GetOwinContext().Authentication.SignOut(
            OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);

    }

但我的问题是我无法将登录用户详细信息分配给用户名,名称为asp:Label ..

我试过了

protected void Page_Load(object sender, EventArgs e)

    {
        if (!Request.IsAuthenticated)
        {
            string UserName = HttpContext.Current.GetOwinContext().Authentication.User.Identity.Name.ToString();
        }

        if (Request.IsAuthenticated)
        {

            string UserName = HttpContext.Current.GetOwinContext().Authentication.User.Identity.Name.ToString();

        }

    }

这对我来说非常重要..任何人都可以帮助我..

1 个答案:

答案 0 :(得分:4)

教程中有一个示例:https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapp-dotnet/

您可以在Step4:

中看到获取用户信息的方法
    public ActionResult About()
{
    ViewBag.Name = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value;
    ViewBag.ObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
    ViewBag.GivenName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.GivenName).Value;
    ViewBag.Surname = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Surname).Value;
   // ViewBag.UPN = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value;

    return View();
}