【问题标题】:Azure App service authentication - SQL database client shardingAzure 应用服务身份验证 - SQL 数据库客户端分片
【发布时间】:2020-09-11 16:57:51
【问题描述】:

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

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

【问题讨论】:

  • 我之前在一个网络应用程序中做过这个,你需要添加一个“声明”。这是我的问题,答案很好。您创建一个映射表,将登录电子邮件映射到您的 ID。然后在登录时查找该 ID 并将其作为声明附加到安全结构中。 stackoverflow.com/questions/43343399/…
  • 谢谢@Nick.McDermaid 会检查一下
  • 每个表都有一个名为account Id的列?
  • @JosephXu 很多。其他人的 ID 链接到具有有意义的帐户 ID 的表。这是我们每个客户的唯一密钥

标签: sql azure azure-web-app-service


【解决方案1】:

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

有两种获取用户名的方法(用于登录的帐户ID)。
1.您可以使用X-MS-CLIENT-PRINCIPAL-NAME作为http 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 广告中添加应用注册时,将redirect url 添加为https://yourfunctionname.azurewebsites.net/.auth/login/aad/callback,并在设置Advanced settings 时单击ID token

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2011-11-04
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多