首页 > 解决方案 > Azure 应用服务身份验证 - SQL 数据库客户端分片

问题描述

我们有一个包含多个客户数据的天蓝色 SQL 数据库。每个表都有一个帐户 ID,我们计划使用它来分隔客户数据。我们通过 Azure App 服务和 azure function app 中的 bff 中间件显示数据。我们计划添加 Azure 应用服务身份验证,以便在我们的 Web 应用中对用户进行身份验证。

但是,我们找不到有关如何针对经过身份验证的用户存储帐户 ID 的文档;这样我们就可以从特定于该用户/客户端的数据库中返回结果?

标签: sqlazureazure-web-app-service

解决方案


应用服务使用特殊标头将用户声明传递给您的应用程序。不允许外部请求设置这些标头,因此它们仅在由应用服务设置时才存在。

有两种方法可以获取用户名(用于登录的帐户 ID)。
1.您可以使用X-MS-CLIENT-PRINCIPAL-NAMEhttp resquest header来获取用户名。

var name1=httpRequest.Headers["X-MS-CLIENT-PRINCIPAL-NAME"].ToString();

2.您可以从Run方法中注入的ClaimsPrincipal实例中获取经过身份验证的用户信息。

public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
    HttpRequest httpRequest, 
    ILogger logger, 
    ClaimsPrincipal claimsPrincipal)
{   
    var name2 = claimsPrincipal.Identity.Name;
}

获取用户名(登录帐号)后,可以将其添加到sql语句的条件中。

笔记:

在 Azure 广告中添加应用注册时,将重定向 url添加为并在设置时https://yourfunctionname.azurewebsites.net/.auth/login/aad/callback单击。ID tokenAdvanced settings


推荐阅读