0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ODC]REST APIのMethod内でBasic認証情報にアクセスする

Posted at

OutSystems 11にはあった、サーバサイドでUsernameとPasswordを指定して(あるいはUserIdだけを指定して)ログインさせるActionが、ODCでは無くなった。

そのため、認証をかけたExpose REST APIで、各Methodで認証を通ったユーザー名などの情報を取ろうと思うと、リクエストヘッダからBasic認証情報を再取得する必要がある。この手順を確認しておく。

環境情報

ODC Studio(Version 1.4.21)

Basic認証付きExpose REST APIの作り方

作成したREST APIのプロパティから、Security > AuthenticationでBasicを選択。
image.png

自動的にOnAuthentication Callbackが作成され、Basic認証情報がそのInput Parameterとして渡される。
image.png

ODCでBasic認証する場合の問題点

サーバーサイドでUsernameとPassword (Users/User_Login Action) 、あるいはUserId ((System)/Login Action) を指定してログインさせるActionが、OutSystems 11にはあった。

しかし、ODCにはそういうActionが無い。
⇨ OnAuthenticationで、受け取ったUsernameとPasswordをEntityやSettingの値に対して検証することはできるが、「ODCにログインさせる」ことはできない
⇨ 後続のREST API Methodで「ログイン中のユーザーの情報を取り出す」ことができない

という問題がある。

この問題の解決策として、REST API Methodでも、Basic認証の認証情報を取り出す方法を確認しておく。

Basic認証情報のフォーマット

入力したBasic認証情報は、Authorizationというリクエストヘッダーに、「Basic Base64エンコードしたUsername:Password」という形式で入る。

以下は、Basic認証をかけたExpose REST APIにリクエストし、Username=testuser、Password=testpasswordを入力した場合のヘッダの例。
image.png

REST API Method中で、Basic認証情報を取り出す方法

リクエストヘッダに平文で入っているわけなので、標準APIの組み合わせで取得可能。

処理の流れは以下の通り。

  1. リクエストヘッダを取るにはHTTP/Request_GetHeader Actionを使う。NameパラメータにはAuthorizationを指定
  2. 取得したヘッダ値先頭にある「Basic 」(スペースがついていることに注意)を、Built-in FunctionのSubstrを使って切り捨て、Base64エンコードした部分を切り出す
  3. BinaryData/Base64ToBinary ActionでBase64エンコードした文字列をBinary Data型に変換(直接Text型にするActionが標準にはないので)
  4. BinaryData/BinaryDataToText ActionでBinary DataをText型に戻す

上記の流れを実装した例。コメントに各ステップでプロパティに設定する値を示している。BinaryDataToTextのOutput Parameterに「Username:Password」形式の文字列が入っている。
image.png

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?