AzureFunctionを呼び出し元のグローバルIPアドレスを取得する必要があったため、
それを実装したのでメモとして残します
送信元IPアドレス取得
AzureFunctionに向けて送信されてきた情報のヘッダーに含まれているのでそれを取得する
以下の関数を作成して使用するだけで送信元IPアドレスが取得できます
下記の方法だとVisualStudio上で作成し、ローカル上で実行して確認しようとしてもIPアドレスが取得できないので、その場合はAzure上にデプロイするなどする必要があります
private static string GetIpFromRequestHeaders(HttpRequest request)
{
return (request.Headers["X-Forwarded-For"].FirstOrDefault() ?? "").Split(new char[] { ':', ',' }).FirstOrDefault();
}
IPアドレスの注意点
ただ、上記を使用するとポート番号が削除及び最初に検知したIPアドレスのみを返却します
// ヘッダー情報にあるIPアドレスにポート番号が含まれている場合
ヘッダーに含まれている情報 : 123.456.789:8888
上記関数での取得結果 : 123.456.789 // 8888が削除されている
// ヘッダー情報にあるIPアドレスが複数含まれている場合
// AzureFunctionに届くまでに経由した分後ろにIPアドレスが追加されます
// APIManagement経由でAzureFunctionを呼び出した際にもこのような形になります
ヘッダーに含まれている情報 : 123.456.789, 987.654.321
上記関数での取得結果 : 123.456.789 // 987.654.321が削除されている
// ヘッダー情報にあるIPアドレスにポート番号が含まれているかつ
// IPアドレスが複数含まれている場合
ヘッダーに含まれている情報 : 123.456.789:8888, 987.654.321
上記関数での取得結果 : 123.456.789 // ポート番号が削除され、最初のIPアドレスのみ
最初はそこそこ手間をかけないと取得できないと思っていたのですが、意外と簡単に取得できてホッとしています。ただ、やり方をすぐに忘れそう。。。