本日 PowerBI Desktop から Microsoft Graph に接続しようとした際、コネクターがないため自分で認証を書く必要がありました。その覚書。
情報元: Error getting OData from Microsoft Graph: Access to the resource is forbidden
Azure AD へのアプリケーション登録
Microsoft Graph を使ってみよう : Azure AD v1 エンドポイントのアプリケーション認証を ADAL で行う を参考に Azure AD に Microsoft Graph が使えるアプリケーションを登録し、以下を取得。
- アプリケーション ID
- クライアントシークレット
Power BI Desktop で接続を作成
1. Power BI Desktop を起動。
3. 「新しいソース」より「空のソース」をクリック。
4. 「詳細エディター」をクリック。
5. クエリに以下内容を張り付け。tenant_name
および client_id
と client_secret
を実際の値に更新。
let
TokenResponse = Json.Document(Web.Contents("https://login.windows.net/<tenant_name>/oauth2/token",
[
Content = Text.ToBinary(Uri.BuildQueryString([
client_id = #"Azure Application Id",
resource = "https://graph.microsoft.com",
grant_type = "client_credentials",
client_secret = #"Azure Application Client Secret"
])),
Headers = [Accept = "application/json"], ManualStatusHandling = {400}
]
)),
AzureAccessToken = TokenResponse[access_token]
in
AzureAccessToken
6. クエリの名前を AzureAccessToken に変更。これでアクセストークンが取れます。
7. 次に実際のクエリに追加。空のクエリをもう一つ追加し、「詳細エディター」をクリック。以下をクエリとして追加。ここではユーザーの一覧を取得するクエリを利用。Authorization ヘッダーには先ほど作成したクエリを指定。
let
Users = OData.Feed("https://graph.microsoft.com/v1.0/users", [Authorization = "Bearer " & AzureAccessToken])
in
Users
8. 「完了」をクリックした際に資格を求められた場合は、「視覚情報の編集」をクリック。
9. 匿名で接続。
尚、この時点で以下のエラーが出る場合は、設定の変更が必要。
Formula.Firewall: クエリ 'クエリ1' (ステップ 'Users') は他のクエリまたはステップを参照しているため、データ ソースに直接アクセスできません。このデータの組み合わせを再構築してください。
Power BI Desktop 設定の変更
1. File より、オプションと設定 | オプションをクリック。
2. 「現在のファイル」の「プライバシー」より、二つ目のオプションを選択し「OK」。
3. 「プレビューの更新」をクリックしてデータ取得を確認。
まとめ
そのうち Microsoft Graph 用のコネクタが出ると思いますが、一旦はこちらで回避できます。尚、トークンは都度取得する必要があります。