如何在托管的 MVC 应用程序中获取 Azure AD 对象 ID?

Posted

技术标签:

【中文标题】如何在托管的 MVC 应用程序中获取 Azure AD 对象 ID?【英文标题】:How to get Azure AD Object ID in a hosted MVC App? 【发布时间】:2020-11-07 15:12:54 【问题描述】:

我有一个作为 Azure Web 应用程序托管的 .Net Core 3.1 MVC 应用程序并启用了快速身份验证。现在在代码中,我想要 Azure AD 对象 ID(在控制器/视图中)。在所有示例和示例中,我看到了多种获取有关用户详细信息(例如名称等)的方法,但找不到任何有关获取对象 ID 的信息。如何获得相同的?

我的控制器很简单,像这样:

public IActionResult Index()

    return View();

在View中,index.cshtml也很通用。

在 startup.cs 中,我有:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            
            else
            
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "controller=Home/action=Index/id?");
            );
        

请告诉我在控制器的 Index() 方法中获取 Azure AD 对象 ID 的方法。

【问题讨论】:

对象 ID 是内部 Azure AD 标识符。您必须查询 Azure AD 才能找到它 【参考方案1】:

我相信 objectid 是作为 oid 声明传递的。它是您在 Express Authentication 中获得的 id_token 的一部分。

How do I get an OID claim in ASPCore from Azure B2C

http://schemas.microsoft.com/identity/claims/objectidentifier

User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value

【讨论】:

我对它做了一些研究。看起来它应该按预期返回我的oid,但是我得到了空值。是否需要在 Azure 中设置任何配置,或者我缺少什么? 我可以通过调用@User.GetObjectId()方法在.cshtml中获取用户的objectID。我在line 的示例中验证了它。

以上是关于如何在托管的 MVC 应用程序中获取 Azure AD 对象 ID?的主要内容,如果未能解决你的问题,请参考以下文章

托管在 Azure 上的点网 mvc 应用程序突然一次又一次地重定向到登录页面,直到重新启动

如何使用 asp.net mvc 从 azure 获取访问令牌

从 Azure 中托管的 ASP.NET Core 5.0 MVC 站点调用 API/服务的间歇性套接字异常

如何将 Azure 托管磁盘克隆到不同的订阅中?

如何获取Azure App Service的特定用户分配的托管服务标识的令牌?

从 asp.net mvc 网站到 azure 认知搜索的连接问题