我已使用WebForms从VS-2019成功发布Azure应用服务。我已成功保护它,以便用户必须使用与应用服务相同域中的Azure AAD帐户登录。我已成功创建AzureSQL数据库。我已成功将AAD域中的用户添加到数据库中,并通过将我创建的Azure AAD帐户用户之一硬编码到连接字符串中,从Azure应用服务中连接到数据库。
现在,我想使用应用程序服务登录名中经过身份验证的AAD用户连接到Azure SQL数据库。到目前为止,我所尝试的一切都失败了。
我对Azure相当陌生。我的大部分经验是在内部公司域上使用SQL服务器/Visual Studio,没有任何云服务。
有人有什么建议吗?
这是我的身份验证码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.Owin.Extensions;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;
using Owin;
using System.Net.Http;
namespace Church
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = EnsureTrailingSlash(ConfigurationManager.AppSettings["ida:AADInstance"]);
private static string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
string authority = aadInstance + tenantId;
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthenticationFailed = (context) =>
{
return System.Threading.Tasks.Task.FromResult(0);
},
SecurityTokenValidated = (context) =>
{
var claims = context.AuthenticationTicket.Identity.Claims;
var groups = from c in claims
where c.Type == "groups"
select c;
foreach (var group in groups)
{
context.AuthenticationTicket.Identity.AddClaim(new Claim(ClaimTypes.Role, group.Value));
}
return Task.FromResult(0);
}
}
}
);
// This makes any middleware defined above this line run before the Authorization rule is applied in web.config
app.UseStageMarker(PipelineStage.Authenticate);
}
private static string EnsureTrailingSlash(string value)
{
if (value == null)
{
value = string.Empty;
}
if (!value.EndsWith("/", StringComparison.Ordinal))
{
return value + "/";
}
return value;
}
}
}
enter code here
此任务a有点复杂。为了实现您的愿望,您必须配置EasyAuth(应用服务身份验证/授权服务)以同时获取AzureSQLDB的访问令牌。您可以在此处阅读有关使用Azure应用服务身份验证的访问令牌的更多信息。请注意Azure Active Directory
配置部分。您将被指示转到https://resources.azure.com/
,找到您的应用服务并更新以下属性:
"addtionalLoginParams":["response_type=代码id_token","资源="]
对于资源参数,您应该使用https://database.windows.net/
,它是AzureSQLDB的标识符。这将允许应用服务身份验证服务(EasyAuth)代表AzureSQLDB的用户获取访问令牌。然后,您将能够从HTTP HEADERX-MS-TOKEN-AAD-ACCESS-TOKEN
(也在同一留档页面上进行了描述)获取此访问令牌。
一旦您成功获取Azure SQL DB的访问令牌,那么您应该对Azure SQL DB使用令牌身份验证,而不是基于用户/密码。文档中的令牌身份验证部分在这里隐藏得很好,本例对此进行了演示:
string ConnectionString =@"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;"
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token that you took from HTTP HEADER X-MS-TOKEN-AAD-ACESS-TOKEN"
conn.Open();
我们有一个ASP经典Web应用程序在Azure应用服务中成功运行,该应用程序当前使用SQL服务器身份验证来访问AzureSQL数据库。我们需要将身份验证更改为Active Directory用户。我们设法使此应用程序从访问AzureSQL数据库的开发人员工作站工作,请参阅下面的工作和不工作。 *不适用于桌面,也不适用于Azure Conportail。打开"提供商=SQLOLEDB;服务器=tcp
我有一个Azure云服务(辅助角色),它需要连接到我的AzureSQL数据库,还需要连接到外部数据库。 在开发过程中,外部数据库位于公共互联网上,连接不是问题。 但是,现在需要在生产环境中部署该解决方案,并且通过设置虚拟网络来限制对外部数据库的访问。 部署在虚拟网络中时,云服务会从子网获取IP,但外部世界似乎无法访问,并且不会连接到AzureSQL数据库(我也无法对其进行RDP)。 这似乎超出了我
我在PHP8中有Azure web应用程序,希望从php代码连接到Oracle数据库12C。从文档中,我发现下面的博客说我们需要Oracle Instant Client,但我没有找到安装步骤。在这个博客中,他们提到php版本高达5.6,但我使用的是PHP8版本。 https://docs.microsoft.com/en-us/archive/blogs/azureossds/access-or
已将本地Web应用程序(. net 4.6.1)迁移到Azure,该应用程序对其用户使用Windows身份验证,然后使用AD集成身份验证连接到MSSQL数据库。 理想情况下,应该保留现有的安全机制,即向AD用户授予对数据库对象的权限,并让DB成为应用程序的安全源。 已创建并配置SQL数据库的副本。 如果我在本地运行web应用程序,但使用新的Azure数据库,则一切正常。 如果我运行此命令,我将获得
那里缺了什么?
问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更