サーバーサイドでアクセストークンを取得する
ここまでで基本的な知識は手に入りました。ここからはASP.NET WebFormを使って、FORGEに取り組んでみます。ビューアのチュートリアルでは、JavaScriptに直接- オブジェクトID
- アクセストークン
を書き込んでいました。また、アクセストークンを取得するには
- クライアントID
- クライアントシークレット
今回はWebFormを使って、アクセストークンを取得してみます。Webフォームのアクションはサーバーサイドで実行されるので、大事な情報をクライアントサイドに置かなくて済みます。
まずはVisual Studioで新しいWebFormプロジェクトを作成します。
RestSharpを導入する
アクセストークンを取得するにはRESTを使って、交信を行う必要があることがわかりました。VBでこれを実装するのはなかなか骨が折れそうですが、RestSharpを使うことでこの難関を切り抜けることができます。プロジェクトにRestSharpを組み込みます。(1) [ツール]-[NuGetパッケージマネージャ]-[パッケージマネージャコンソール]
(2) パッケージマネージャコンソールで
PM> Install-Package RestSharp
WebFormを追加
(1) [プロジェクト]-[新しい項目の追加]
(2) [Webフォーム]を選択して[追加]
(3) 画面左下の[並べて表示]をクリック
(4) ボタンとラベルを追加
ボタンのアクションを追加
(1) 追加したボタンをダブルクリックして、コードを表示する(2) コードは以下のようになります。
Imports System.Net
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'ラベルをクリア
Label1.Text = ""
'クライアントIDとクライアントシークレット
Dim client_id As String = "自分のクライアントIDで置き換え"
Dim client_secret As String = "自分のクラインとシークレットで置き換え"
'URL
Dim strClient As String = "https://developer.api.autodesk.com"
'RestSharpでクライアントを作成
Dim _client As New RestSharp.RestClient(strClient)
'RestSharpでリクエストを作成
Dim authReq As New RestSharp.RestRequest()
With authReq
.Resource = "authentication/v1/authenticate"
'メソッド
.Method = RestSharp.Method.POST
'ヘッダー
.AddHeader("Content-Type", "application/x-www-form-urlencoded")
'ボディ
.AddParameter("client_id", client_id)
.AddParameter("client_secret", client_secret)
.AddParameter("grant_type", "client_credentials")
'スコープはとりあえずdata:read
.AddParameter("scope", "data:read")
End With
'リクエストを送信
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)
If result.StatusCode = HttpStatusCode.OK Then
'結果(json形式の結果が文字列で返ってくる)
'このjsonは以下の形式となる
'{
' "token_type": "Bearer",
' "expires_in": 1799,
' "access_token": "Ff387cyQXw1elOT3nldiFIKBqDOs"
'}
Dim responseString As String = result.Content
'ここからaccess_tokenの値だけを取り出す
'文字列を操作しても可能だが、Newtonsont.Jsonの解読メソッドを使うと便利です。
'使い方はまず以下の構文でオブジェクトを作成します。
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
'アクセストークンをオブジェクトに引数を与えて取得します
Dim acToken As String = jsonObj("access_token")
'Label1の表示を変更
Label1.Text = acToken
Else
'失敗した場合
Label1.Text = "アクセストークンを取得できませんでした。"
End If
End Sub
End Class
ポイントはRestSharpのリクエストの作り方と、戻り値のJSONからaccess_tokenの値と取り出す部分です。Newtonsoft.Jsonは規定でASP.netに組み込まれているので、特に参照を操作する必要はありません。
実行してみる
ビルドして実行してみます。最初の画面はこうです。
ボタンを押してみましょう |
アクセストークンが取得できた! |
結構少ないコードで、安全にアクセストークンを取得できることがわかりました。
0 件のコメント:
コメントを投稿