gpt4 book ai didi

azure - 从 Azure 应用服务连接到 Azure SQL 数据库

转载 作者:行者123 更新时间:2023-12-02 07:22:57 24 4
gpt4 key购买 nike

我已使用 WebForms 成功从 VS-2019 发布了 Azure 应用服务。我已成功保护它,以便用户必须使用与应用服务位于同一域中的 Azure AAD 帐户登录。我已成功创建 Azure SQL 数据库。我已成功将 AAD 域中的用户添加到数据库,并通过将我创建的 Azure AAD 帐户用户之一硬编码到连接字符串中,从 Azure 应用服务内部连接到数据库。

现在我想使用应用服务登录中经过身份验证的 AAD 用户连接到 Azure SQL 数据库。到目前为止我尝试过的一切都失败了。

我对 Azure 还很陌生。我的大部分经验都是在内部公司域上使用 SQL Server/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(应用程序服务身份验证/授权服务)以获取 Azure SQL DB 的访问 token 。您可以阅读有关使用 Azure 应用服务身份验证的访问 token 的更多信息 here 。请注意 Azure Active Directory 配置部分。系统将指示您转到 https://resources.azure.com/,找到您的应用服务并更新以下属性:

"additionalLoginParams": ["response_type=code id_token", "resource="]

对于资源参数,您应该使用https://database.windows.net/,它是 Azure SQL DB 的标识符。这将允许应用服务身份验证服务 (EasyAuth) 代表 Azure SQL DB 用户获取访问 token 。然后,您将能够从 HTTP HEADER X-MS-TOKEN-AAD-ACCESS-TOKEN 获取此访问 token (也在 same documentation page 中进行了描述)。

成功获取 Azure SQL DB 的访问 token 后,您应该对 Azure SQL DB 使用 token 身份验证,而不是基于用户/密码。文档的 token 身份验证部分是well hidden here这个例子演示了这一点:

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();

关于azure - 从 Azure 应用服务连接到 Azure SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61733183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com