我有一个Azure 应用服务以及功能应用(我目前正在学习Azure,如果还有其他方法可以实现我想要的,我愿意接受建议)。应用服务包含一个简单的表格,我想与应用程序同步(已经正在运行),我想实现一个带有blob存储输入绑定或定时器触发器的功能,它可以填充简易表格。
由于似乎没有针对简单表的输出绑定,我遵循this answer并使用MobileServiceClient
实现了访问。
MobileServiceClient client = new MobileServiceClient("https://my-app.azurewebsites.net");
var table = client.GetTable<MyTableClass>();
await table.InsertAsync(myObject);
只要表是可公开写的,这就可以工作,当然,当它是非同类的可读时它不起作用,但只能为经过身份验证的用户写入。为了验证我的功能,我创建了一个Azure Active Directory并为该AD中的应用程序创建了一个API密钥,然后我尝试通过
验证MobileServiceClient
await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,
new JObject {{"access_token", "<my API key>"}});
但这没有成功。我总是收到错误
请求无法完成。 (未授权)。
显然这没有用(使用API密钥的方式实际上只是在黑暗中拍摄),但我不知道如何从我的功能应用程序完成身份验证。我知道当我在应用程序中使用MobileServiceClient
时,我可以将用户重定向到登录,但这显然不适用于函数。
如何使用现有应用服务验证我的功能,以便写入匿名无法写入的表格?
答案 0 :(得分:0)
app service 无法通过API密钥进行简单访问,但访问应用服务需要通过Active Directory进行完整身份验证。为此,可以使用 ADAL (Active Directory Access Library)。
AuthenticationContext
ADAL定义AuthenticationContext
类,它是使用Active Directory进行身份验证的帮助程序。首先创建一个新的AuthenticationContext
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/<Directory ID>");
您可以通过访问Azure门户中的 Azure Active Directory 找到Directory ID
,然后从 Azure Active Directory菜单中打开属性 。在属性菜单中,有一个包含Directory ID
。
您现在可以使用
进行身份验证var authenticationResult = await authenticationContext.AcquireTokenAsync(
"https://batch.core.windows.net/",
new ClientCredential("<app ID>", "<app secret>"));
我假设已经 已注册的应用。要获取应用ID ,请访问 Azure Active Directory →应用注册→&lt;您的应用&gt; ,您可以找到应用程序ID (也在属性下)。
接下来,您必须为应用创建密钥。因此,请访问 Azure Active Directory →应用程序注册→&lt;您的应用程序&gt; →密钥。您可以在那里创建密钥,只需输入密钥名称和到期日期,然后单击“保存”。保存后将显示密钥。 (小心:之后无法恢复密钥。将其保存在某处。)
MobileServiceClient
最后一步是创建MobileServiceClient
。由于UI登录不可用,我们必须手动创建登录用户(请参阅here)。
MobileServiceClient client = new MobileServiceClient("https://my-app.azurewebsites.net");
client.CurrentUser = new MobileServiceUser("Foo:123456789");
client.CurrentUser.MobileServiceAuthenticationToken = authenticationResult.AccessToken;
现在MobileServiceClient
已经过身份验证,可以使用了。
答案 1 :(得分:0)
您使用托管服务标识来验证您的应用服务功能。
您的应用程序可以与其他Azure服务进行通信 使用托管的Azure Active Directory标识。
您可以在此处查看如何启用和使用托管身份:
https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity
希望这有帮助!