我使用Azure数据工厂HTTP连接器作为链接服务,使用基本身份验证从REST端点读取数据。
{
"name": "LS_HTTP",
"properties": {
"hubName": "Hub name",
"type": "Http",
"typeProperties": {
"url": "http://*****.azurewebsites.net",
"authenticationType": "Basic",
"gatewayName": "",
"encryptedCredential": "",
"username": "test",
"password": "**********",
"enableServerCertificateValidation": true
}
}
}
编写以下代码段以从我的Web API标头中获取用户名和密码
string authHeader = context.Request.Headers["Authorization"];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
//Extract credentials
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
var username = usernamePassword.Substring(0, seperatorIndex);
var password = usernamePassword.Substring(seperatorIndex + 1);
if (username == "test" && password == "****")
{
await _next.Invoke(context);
}
else
{
context.Response.StatusCode = 401; //Unauthorized
return;
}
}
else
{
// no authorization header
context.Response.StatusCode = 401; //Unauthorized
return;
}
当我使用此设置运行Azure数据工厂管道时,我无法从web api中的请求标头获取用户名和密码,基本上Authorization标头本身为null。 帮助我从我的Web API中获取从ADF连接器服务传递的用户名和密码。
答案 0 :(得分:0)
查看您的定义,您正在使用Data Factory v1。我看到你配置了一些基本身份验证不需要的属性。
encryptedCredential,不是必需的。 The documentation states:
由于您未使用本地HTTP服务器,因此不需要描述:用于访问HTTP端点的加密凭据。在复制向导或ClickOnce弹出对话框中配置身份验证信息时自动生成。
必需:否。仅在从本地HTTP服务器复制数据时应用。
gatewayName
描述:连接到本地HTTP源的数据管理网关的名称。
enableServerCertificateValidation,已默认为true
文档提供了这个基本示例:
{
"name": "HttpLinkedService",
"properties":
{
"type": "Http",
"typeProperties":
{
"authenticationType": "basic",
"url" : "https://en.wikipedia.org/wiki/",
"userName": "user name",
"password": "password"
}
}
}