"https://myapp-registration-westus-dev.azurewebsites.net/" 使用リソースIDが正確であることを確認してください。私はここでAzure AD認証を設定するための手順を踏んで、同じコードを使用してトークンを取得できました。 https://docs.microsoft.com/en-us/azure/app-service/app-service-mobile-how-to-configure-active-directory-authentication
このコードを実行して、MSIから返されたエラーを正確に確認することもできます。問題の解決に役立たない場合は、エラーを投稿してください。
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
var response = await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), "https://myapp-registration-westus-dev.azurewebsites.net/", "2017-09-01"));
string msiResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
log.Info($"MSI Response: {msiResponse}");
アップデート: - 私のために このproject.jsonファイルとrun.csxファイル作品。注:project.jsonは.NET 4.6を指し、Azure関数のドキュメント(コメント内のリンク)に従って、.NET 4.6は現在サポートされている唯一のバージョンです。 参照アセンブリを再度アップロードする必要はありません。おそらく、net452の代わりにnetstandardアセンブリの誤った手動アップロードが問題を引き起こしています。
のみの.NET Framework 4.6がサポートされ、ので、ここで示したように、あなたの project.jsonファイルがnet46指定していることを確認しています。 project.jsonファイルをアップロードすると、ランタイムはパッケージを取得し、自動的に がパッケージアセンブリへの参照を追加します。 #r "AssemblyName"ディレクティブを追加する必要はありません。 NuGet パッケージで定義されたタイプを使用するには、必要なusingステートメントをrun.csxファイルに追加します。
project.json
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.Azure.Services.AppAuthentication": "1.0.0-preview"
}
}
}
}
run.csx
using Microsoft.Azure.Services.AppAuthentication;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
try
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net/");
log.Info($"Access Token: {accessToken}");
return req.CreateResponse(new {token = accessToken});
}
catch(Exception ex)
{
log.Error("Error", ex);
throw;
}
}
"Microsoft.Azure.Services.AppAuthentication": "1.0.0-preview"、 –
同じリソースuriでclient.GetAsync()を使用すると、有効なトークンが返されます。 Azure関数では、NuGetを使ってAppAuthenticationコンポーネントを解決し、#r ".. \ bin \ ..."で参照しています。私はこのリファレンスを使用しています:** "Microsoft.Azure.Services.AppAuthentication": "1.0.0プレビュー" **これは最新バージョンですか?また、関数を後で呼び出すとGetAccesstokenAsync()がハングし、返されません。 –
あなたはclient.GetAsync()から取得した応答を共有できますか?「MSI応答」はログに記録されますか?アクセストークンをプレースホルダ(たとえば「eyJ0eXAi ...」)で置き換えます。応答形式が期待どおりであることを確認したいだけです。 NuGetのバージョンは正しいですが、これが唯一のバージョンです。 –