中の人のBlogで「今までEntityFrameworksとDapperを使っていたけれど、軽量なDapperを全面的に採用しました」というのを見かけました。思ったので、検証してみた結果をまとめてみたいと思います。Codeを使っています。簡単なプログラミングから、ログ漁り、PowerShellなどの実行まで、これで一通りやっているんですが、その中の一つに私の会社で出している製品の独自スクリプト言語を書くという仕事(半分趣味)がありました。いうことで、「これは参加しないわけにはいかない!」となり、飛行機で大阪まで飛んで参加してきました。記事を書いてみました。仙台(2019)」でのLT用登壇資料ベースとして書いているので、後々スライドや登壇時の動画も公開するかなーと思っています。生成する方法を解説したいと思います。RDBからもAPIの生成が可能です。いうかそっちの方がメインです)ちなみに今回作ったAPIは以下の内容で公開しています。APIを公開してみました。格安プランなので、あまりにアクセスがあると落ちちゃうかも。PowerApps・CDSでもこのアプリケーションアクセス許可が使えるよーと、ちらっとだけお話しました。PowerApps・CDSとして最新環境で書き直してみたものを紹介したいと思います。AccessTokenを取得してみる注意点アプリ認証のポイント今回は以下のReferenceで紹介されている「アプリとして接続」を実施します。」で行う点と、この接続のための実行ユーザーを利用するという点にあります。つまるところアプリケーションのアクセス許可によるAPIの利用には、通常のOAuthプロセスで行われるユーザーログインの要求から、アクセス許可、アクセストークンの取得といったプロセスが存在しません。CDSはそのアーキテクチャやAPIの特性上、必ずアクセスユーザーというものが存在する前提で構成されています。ADアプリ登録までは基本的に同じプロセスなのですが、アプリとして接続するためのユーザーの作成と、そのユーザーとアプリを紐づける、という特殊な作業が発生します。ここを抑えておくことが、アプロとしての接続を行う場合に重要なポイントとなります。ADにアプリを登録しましょう。基本的な手順は今までの記事に書いてあるのと一緒です。管理センターに移動し、「アプリの登録」→「+新規登録」をクリック。任意のアプリケーション名を入力して、シングルテナントアプリケーションとして作成します。リダイレクトURIはローカルホストでかまいません。今回は特に使うシチュエーションがないためです。アプリを作成したら、クライアントIDを控えておきます。次に、「証明書とシークレット」の画面に移動して、クライアントシークレットを作成します。任意の名称と有効期間で登録し生成されたクライアントシークレットを同じように控えておきます。最後にAPIのアクセス許可を設定します。Service」というものもありますが、関係ありません。行うため、GraphAPIの文脈で行くとアプリケーションの許可になるのですが、PowerApps/CDSの性質上、それが使えません。そのため、「委任されたアクセス許可」を付与してあげます。次にこのアプリ認証用のためだけのユーザーというものを作成します。時に明示的なユーザーを指定しなくても、アクセスができるようになります。PowerAppsのCDS環境にアクセスし、設定アイコンから「詳細設定」の画面に移動します。私の環境が英語版で作ってしまったので英語ですが、日本語でもあまりかわらないです。設定一覧から「セキュリティ」に移動しユーザーをクリックします。ここでユーザーを作成するのですが、単純に「+新規」ボタンをクリックしてはいけません。ユーザー」を選択してください。ユーザー」を選択した後に「+新規」をクリックすることで新規作成画面に移動できます。移動した後も気が抜けません。ユーザー」に切り替えてください。ユーザーの作成を行うことができるようになります。Id」以外は自由に指定して大丈夫です。ADアプリのClientIdを指定する必要があります。これを以下のように入力したら、保存をクリックします。保存した後、仕上げにこのユーザーに対してセキュリティロールを設定します。これがAPIアクセス時におけるアクセス許可範囲に相当します。今回はあまり気にせずSystemAdminを付与しました。AccessTokenを取得してみるそれでは設定した情報を使って、AccessTokenを取得してみます。私が使用したPostmanのコレクションも公開しておいたので、参考にしてみてください。github.comPostmanにCollectionとEnvironmentをインポート後、以下のように各環境変数を設定します。Requestを確認します。今回試していてわかったのですが、どうやらまだAzureADV2のOAuth2エンドポイントには今回のアプローチが対応していないようでした。以下のコードはV1で実施したものを記載しています。ADのAccessToken要求URLは「POST:https://login.microsoftonline.com/{{TenantId}}/oauth2/token」です。ここにパラメータとして「grant_type=client_credentials」とともに、取得したClientId・ClientSecretを渡します。併せてResourceとして対象となるPowerApps・CDS環境のURLを渡すのがポイントですね。AzureテナントIDとCDSテナント名は私が使っているものをそのまま記載していますので、適宜差し替えてRequestしてみてください。Postmanのコレクションでは環境変数にそのまま設定すればOKです。application/x-www-form-urlencodedgrant_type=client_credentials&client_id=a98cea62-98f0-4b64-9d9d-b1265feb8ee5&client_secret=K2muHFy5VrBy1MW2_krbCB%3F%40vXXryLE%40&resource=https%3A%2F%2Forg61d4c5f1.api.crm.dynamics.com%2Fすると以下のようにAccessTokenを取得できます。APIにアクセスしてみると、以下のように取引先企業一覧が取得できました。APIにアクセスができてしまいます。通常のOAuthですとアプリに付与して公開とかあるかと思いますが、それとはまったく扱いが異なるものとなりますので、取り扱いにはご注意ください。福岡」に焚き付けられて、かなり久しぶりに主催で勉強会を開催しました!jpo365ug.connpass.com初めは小規模でゆるーくできればいいかなーと思ったんですが、あれよあれよという間に申し込みだけで130名以上になってしまい、びっくりでした。様に会場を貸していただいのですが、すごくロケーション・設備ともに充実していてよかったです!また、今回個人的初の試みとして勉強会の模様をYoutubeでライブ配信しました!最終的に個別セッションに動画を編集して公開しましたので、興味のある方は是非ご覧ください。ライブ配信はPC(OneMix2)と繋いで、Webカメラベースにして、Youtubeライブで配信しました。(GoPro標準のライブ配信はYoutubeモバイルライブ配信になっていて、フォロワーが1000名必要なのでできませんでした)音声はインライン入力していないので、ちょっと周りの拍手の音とかがうるさいかもです、、、。このあたりは今後要対策。三脚はGoPro純正の3-Way。当日わたわたやっていたので、ちょっと水平調整が難しかったです・・・。HDMI変換アダプター「GV-HUVC」を使用。これはあまり遅延もなくてよかった。意外と良いお値段・・・。APIを使う過程で遭遇した躓きである、2種類のアクセス許可についてお話しました。スライドはこちらで公開中。speakerdeck.com当日はデモベースで2種類のアクセス許可の実施方法を解説していますので、このあたりよくわかってないなーという方は動画も併せて是非参考にしてみてください。365・CDSの認証部分についても触れていたりしますが、このあたりは一度もうちょっと深堀りしたいですね。youtu.beちなみにこのセッションの詳細は以下のBlogでもまとめています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。