C# 如何保护Web API和应用程序使用的Azure SQL数据库(Azure AD)

C# 如何保护Web API和应用程序使用的Azure SQL数据库(Azure AD),c#,asp.net,azure,azure-sql-database,azure-active-directory,C#,Asp.net,Azure,Azure Sql Database,Azure Active Directory,我目前正在开发几个应用程序,大部分托管在Azure上:一个调用托管在Azure上的API的Excel加载项(Office应用程序),一个托管在Azure上的web应用程序,以及以后可能的其他应用程序 为了对用户进行身份验证,我使用Azure Active Directory(Azure AD),基于web API的令牌身份验证,以及web应用程序的OpenID。因此,由于Azure AD,对API或web应用程序的每次调用都经过身份验证,因此可以在应用程序层实现基于角色的访问控制 这些API/应

我目前正在开发几个应用程序,大部分托管在Azure上:一个调用托管在Azure上的API的Excel加载项(Office应用程序),一个托管在Azure上的web应用程序,以及以后可能的其他应用程序

为了对用户进行身份验证,我使用Azure Active Directory(Azure AD),基于web API的令牌身份验证,以及web应用程序的OpenID。因此,由于Azure AD,对API或web应用程序的每次调用都经过身份验证,因此可以在应用程序层实现基于角色的访问控制

这些API/应用程序经常调用Azure SQL数据库,我的问题如下:是否可以使用经过身份验证的用户(来自Azure AD)对数据库访问进行身份验证

目前,数据库凭据硬编码在连接字符串中(为应用程序创建登录名),但这不允许严格的DB访问控制规则

其他信息:无法进行集成身份验证(使用Windows用户),因为我的组织中的Windows登录和Azure登录不同:Azure和Windows活动目录不同


非常感谢您的帮助。

是的,Azure SQL Server支持Azure Active Directory身份验证。本文介绍如何设置它:

您的数据库必须是V12才能使用此功能。如果不是,您可以将其升级到V12

然后,您可以使用如下连接字符串连接到数据库:

    string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
    SqlConnection conn = new SqlConnection(ConnectionString);
    conn.Open();

你好,Yoape,谢谢你的回答。我已经尝试过Active Directory集成,但它不起作用。我猜这是因为用户没有登录到计算机上的Azure广告,但我不能完全确定。由于您的用户没有在计算机上通过AAD身份验证,您可能必须选择用户名/密码AAD。详细信息在@yoape posted的同一链接上。我们可以使用类似的链接吗?但是对于ASP.NET Web API,根据您对Web/Web API进行令牌身份验证的方式,可能会对连接使用令牌身份验证,请参阅同一篇文章中的7.3连接Azure AD令牌。关于Web API:令牌是为调用Web API的网站获取的(具有调用API的委派权限),这意味着令牌资源是“mycompany.onmicrosoft.com/mywebsite usingteapi”,而不是“database.windows.net”。通过委派权限,是否可以使用这样的令牌访问数据库?我无法让它工作,所有教程都指向为“database.windows.net”获取令牌,表示专用于数据库访问的令牌。