LoginSignup
1
0

More than 3 years have passed since last update.

Azure Blockchain WorkbenchのREST APIを活用して(モバイル)アプリを開発する

Posted at

Azure Blockchain Workbenchとは

AzureにAzure Blockchain Service(以下ABS)とAzure Blockchain Workbench(以下ABW)がある。
ABWはブロックチェーンを展開しやすくしたプラットフォームである。裏でABSを使っている。
ABWの概要について公式のドキュメント:『Azure Blockchain Workbench とは』を参照。

目標

デジタル改革時代において、あらゆる分野でのブロックチェーンの期待が高まっている。
金融期間だけではなくサプライチェーンやIoTでも活用シーンが増えている。
ABWはブロックチェーン技術の多様化の可能性を広げる。
ABWのREST APIを使用すれば、UIの開発とブロックチェーンの開発を分散できる。
本書でAzure FunctionsからABWのREST APIの使用方法とサンプルを提供し、多様化・活用の拡大を目指す。

前提条件

対象者:レベル300以上
下記のソフトは事前にインストールしていることを前提とする
1.Postman
2.Visual Studio(VSCode)
3.DOTNET Core SDK and Azure Functions SDK
他にC#とSQLサーバーのスキルが必要。

事前準備

まず、下記リンクの手順に従ってABWを(Azure AD 構成部分まで)デプロイする。
重要:デプロイするリージョンは手順書通り『米国東部』にしてください。日本リージョンにデプロイすると利用料金が高くなる。
ABWのデプロイ手順書
設定したユーザーIDやパスワードを忘れないように控えておく。
この時点でAzure ADにABWのAPI用のアプリケーションが作成されているはず。

ABWのサンプルをダウンロードして、Asset Transferアプリケーションを追加する。
ローカルフォルダのパスを追って、JSONとSOLを順番にデプロイする。
image.png
アプリケーションをクリックして、Ownerロールのユーザーを追加する。
image.png

REST API用のアプリケーションをAzure ADに登録する

1.新規のエンタープライズアプリケーションを作成
Azureポータル→メニュー→Azure Active Directory→エンタープライズアプリケーション→新規アプリケーション
image.png
image.png
2.APIキーの作成
image.png
image.png
重要:必ずコピーボタンを押して、作成したキーの値をメモ帳などに保存する。
image.png

3.作成したアプリケーションのIDを取得してメモ帳などに保存する。
image.png

4.アクセス権限を付与する。
自分のAPIから上記の事前準備で作成されたABWのアプリケーションAPIを選択する。
image.png
ABWのアプリケーションAPIが存在しない場合、上記の事前準備からやり直す。
image.png
今回はアドミニストレータ権限を付与するので同意が必要。
注意事項:プロダクション(本番)環境は必要最低限の権限を付与する必要がある。
image.png
image.png
5.ユーザーIDを取得
全て上手くいけば、事前準備で作成されたABWのアプリケーションAPIのユーザーに上記で作成したアプリケーションが追加されているはず。
image.png
アプリケーションをクリックしてブラウザのURLからユーザIDを取得してメモ帳などに保存する。
ユーザーIDはこんな感じ:XXf2731e-0ecf-484b-abdf-9151e3212999
image.png

REST API用のユーザーをABWに登録する

このセクションは少しトリッキーであるため、
まず、Microsoft公式ドキュメント:
1.ブロックチェーンアプリを使用する
2.Workbench ユーザを管理する
3.Workbench APIを使用する
を一読する。

さて、APIユーザーを作りましょう。
1.postmanコレクションをダウンロードしてpostmanにインポートする。
2.設定を変更する。
image.png
変更必要な箇所は:
・Pre-request Scripts
・Variables
image.png
まずはPre-request Scriptsの
①Azure ADのテナント
②上記事前準備で作成されたアプリケーションID
③上記で作成したREST API用アプリケーションID(メモ帳に保存しているはず)
④上記で作成したREST APIキー(メモ帳に保存しているはず)

code
const echoPostRequest = { 
  method: 'POST',
  url: 'https://login.microsoftonline.com/①.onmicrosoft.com/oauth2/token',
  headers: 
  { 
    'cache-control': 'no-cache',
    'Content-Type': 'application/x-www-form-urlencoded' 
  },
  body: 
  {
    mode: 'urlencoded',
    urlencoded: 
    [
        {key: "resource", value: "", disabled: false},
        {key: "client_id", value: "", disabled: false},
        {key: "client_secret", value: "", disabled :false},
        {key: "grant_type", value: "client_credentials", disabled: false}
    ]
  }
};

pm.sendRequest(echoPostRequest, function (err, res) {
    console.log(err ? err : res.json());
        if (err === null) {
            console.log('Saving the token and expiry date')
            var responseJson = res.json();
            pm.environment.set('currentAccessToken', responseJson.access_token)
        }
    });

次にゴローバル変数を定義する。
baseURLは基本URLに-apiがついているものとなる。
URLの取得は上記の「3.Workbench APIを使用する」を参照。
image.png
Updateしてダイアログを閉じる。

3.ユーザ作成APIを呼び出す。
まず、設定を確認する。

image.png
次にパラメータを設定する。
externalIDに上記で取得したユーザIDを設定する。
あとは任意の値を入力する。
Sendボタンを押してユーザを作成する。
上手くいけば結果が200で、作成したユーザーのID(一桁の数値)が返ってくる。
このユーザIDを覚えておく必要がある。
image.png

4.ここがトリッキーな部分
ABWのユーザーはAzure ADで管理されているので、上記で作成したユーザはAzure ADに存在しないため、
アプリケーションのメンバーとして追加することができない。
右上のmemberをクリックすれば確認できる。
image.png

Azureポータル→ABWのリソースグループ→ABWのデータベース(アイコンい歯車がない方)→サーバファイアウォール設定でクライアントIPを追加して、SSMSからアクセスできるようにする。
SSMSを立ち上げて、下記の通り1レコードを追加する。
image.png
RoleAssignmentテーブルを編集モードで開いて、
上記で追加したAPI用ユーザIDとApplicationRoleIdを入力する。
ApplicationRoleIdの値はすでにあるレコードと同じ値を入力する。
image.png
最後にアプリケーションのメンバーシップを確認する。
image.png

Azure Functionsを使ってアセットを登録しましょう

ソースコードをgithubからダウンロードして、Visual Studio 2019で開いて、認証情報を設定する。
設定する内容は上記postmanの設定と同様である。

コード
// 上記事前準備で作成されたアプリケーションID
static string APPLICATION_ID = "";
// APIのURL
static string API_URL = "https://xxxxxxx-api.azurewebsites.net";
// Azure ADのテナント
var AUTHORITY = "xxxxxx.onmicrosoft.com";
// 上記で作成したREST API用アプリケーションID(メモ帳に保存しているはず)
var CLIENT_ID = "";
// 上記で作成したREST APIキー(メモ帳に保存しているはず)
var CLIENT_SECRET = "";

1回目実行すると新規のユーザー(現在のユーザー)が作成される

コード
// 96行目の結果は1回目はfalseで、2回目以降はtrueになる
var canUserAccessWorkbench = await GatewayApi.Instance.CanCurrentUserCreateContractsForWorkflow(WORKFLOW_ID);

コード
// 130行目にアセット情報を設定する。
workflowAction.WorkflowActionParameters.Add(new WorkflowActionParameter() { Name = "description", Value = "Computer" });
workflowAction.WorkflowActionParameters.Add(new WorkflowActionParameter() { Name = "price", Value = "999" });

F5を押してプロジェクトを実行する。
アウトプットウインドからURLを取得してブラウザでURLを開く。
すべて上手くいくと下記のようにアセットが登録される。
image.png

Happy chaining

参考記事:mahdi alirezaie Jan 12, 2019

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0