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

3
我目前正在开发几个应用程序,大部分托管在Azure上:一个调用托管在Azure上的API的Excel插件(Office Apps),一个托管在Azure上的Web应用程序,以及可能会有其他应用程序。
为了认证用户,我使用基于令牌认证的Azure Active Directory(Azure AD)用于Web API,以及基于OpenID的Web应用程序。因此,每次对API或Web应用程序的调用都是通过Azure AD进行身份验证的,因此可以在应用程序层实现基于角色的访问控制。
这些API /应用程序通常会调用Azure SQL数据库,我的问题是:是否可以使用经过身份验证的用户(来自Azure AD)来认证数据库访问?
目前,数据库凭据已硬编码在连接字符串中(登录名是为应用程序创建的),但这不允许严格的DB访问控制规则。
附加信息:集成身份验证(使用Windows用户)不可能,因为我的组织中的Windows登录和Azure登录是不同的:Azure和Windows Active Directories不同。
非常感谢您的帮助。
1个回答

1
是的,Azure SQL Server支持Azure Active Directory身份验证。本文介绍了如何设置:https://learn.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication 要使用此功能,您的数据库需要为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 AD,但我不完全确定。 - Rimcanfly
由于您的用户在计算机上没有进行AAD身份验证,因此您可能需要选择用户名/密码AAD。详细信息请参见@yoape发布的同一链接。 - Dan Rediske
我们能否使用类似于 https://github.com/Microsoft/sql-server-samples/tree/master/samples/features/security/azure-active-directory-auth/token 的东西?但是用于 ASP.NET Web API。 - RudyCo
根据您为Web/Web API完成令牌身份验证的方式,可能可以使用令牌身份验证进行连接,请查看同一篇文章中的7.3使用Azure AD令牌连接 - yoape
关于 Web API:令牌是为调用 Web API 的网站获取的(该网站具有调用 API 的委派权限),这意味着令牌资源是“mycompany.onmicrosoft.com/myWebsiteUsingTheAPI”,而不是“database.windows.net”。是否可能通过委派权限使用此类令牌访问数据库?我无法使其正常工作,所有教程都指向获取针对“database.windows.net”的令牌,这意味着专用于数据库访问的令牌。 - Rimcanfly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接