cfoauth使用時の注意事項について

ColdFusionで用意されているcfoauthタグを使用するとOAuth2.0認証を使用することができます。type="facebook"とtype="google"についてはデフォルトのパラメーターが用意されていますが、それ以外のOAuth2.0の認可サーバーへの認証も行うことができます。cfoauthタグに用意されている属性については、下記をご確認ください。

cfoauth (adobe.com)

cfoauthタグは、認可サーバーからアクセストークンを取得するためのタグです。認可サーバーにアクセスして、ユーザーの認証を通して①認可コードと②(認可コードとシークレットをもとに)アクセストークンを受け取ることを目的としています。

<cfoauth
  clientid = "認可サーバーでアプリケーションを登録した際に発行されるID"
  scope="今回の認証で要求する権限(アクセス可能な範囲)"
  result = "アクセストークンを含む結果を受け取る変数"
  redirecturi = "認可サーバーからの応答を受け取る遷移先URL"
  authendpoint = "認可サーバーに認可コードを要求するためのURL"
  accesstokenendpoint = "認可サーバーに認可コードを渡してアクセストークンを要求するためのURL"
secretkey="アプリケーションで指定するシークレット"
>

指定する属性の値は、利用するOAuthの認可サーバーが公開している情報や一般ユーザーの情報を参考にしてください

Microsoft ID プラットフォームと OAuth 2.0 認証コード フロー - Microsoft Entra | Microsoft Docs
Microsoft Graph の認証と承認の基本方法 - Microsoft Graph | Microsoft Docs

 

cfoauthを使用する上での注意点をいくつかご紹介します

  • 認可コードについて
    • cfoauthでは①認可コードと②(認可コードとシークレットをもとに)アクセストークンを受け取る処理を行います。認可コードは②で使用しますが、cfoauthは受け取った認可コード(とシークレット)を使って自動的に②の処理を行いますので、cfoauthタグに認可コードを指定することがありません
      • cfoauthは①の処理(ブラウザに認証用のダイヤログが表示される)のと②の処理を行うことになります
         
  • 呼び出し元とリダイレクト先が違うページの場合
    • redirecturi のデフォルトは、リクエストしたページと同じページになります。これは、リクエストしたページにcfoauthが書かれていて、①認可コードと②アクセストークンを受け取る処理を行うためです。
    • もし、リクエストしたページとリダイレクト先が違うページの場合は、リダイレクト先のページで②アクセストークンを受け取る処理を行いますので、リダイレクト先のページにもcfoauthを記載します
       
  • resultの内容について
    • ②アクセストークンを受け取る処理で、ColdFusionサーバーから認可サーバーへのHTTPリクエストが行われます。認可サーバーからアクセストークン(JSON形式のデータ)を受け取ったColdFusionは、それを構造体に変換してresultに指定した変数にセットします
      • result="res"を指定した場合、アクセストークンの値は#res.access_token#で取得できます。
         
  • ②アクセストークンを受け取る処理でエラーが発生する場合
    • Failure! Ensure that you have provided valid data for attributes.のエラーが②の処理で出る場合があります。以下のような要因が考えられます
      1. 渡されてきた①認可コードを時間が経ってから再送した
        • 認可コードの有効期間は短時間です(上部で紹介したMicrosoft IDでは約10分で期限が切れると書かれています)。認可コードは一般的にURLパラメータとして送信されてくるため、例えば、そのURLパラメーターを含んだページをリロードすると、時間が経過してから、再度URLパラメーターの認可コードを使って②の処理を行おうとしてエラーになります
      2. ColdFusionサーバーから認可サーバーへのHTTPリクエストが行えない
        • 外部ネットワークへのアクセスが制限されているような環境でColdFusionサーバーを運用していると、ColdFusionから認可サーバーへアクセスできずにこのエラーが発生します
          • ファイアウォールで遮断されている場合は、認可サーバー(と②の後にWebAPIを使用してアクセスするリソースサーバー)に対して通信を許可してください
          • 社内プロキシ環境でColdFusionサーバーを実行している場合は、下記のFAQを参考にプロキシの設定を追加してください

アクセストークンを受け取った後は、ColdFusionサーバーから対象のWeb APIに対してアクセスを行い、データを受け取る処理を行います。ColdFusionのcfhttpタグを使用します。例えば、前述のMicrosoft Graph の認証と承認の基本方法のページには、「Microsoft Graph を呼び出す場合は、アクセス トークンをベララー トークンとして HTTP 要求の Authorization ヘッダーに添付します」と書かれています。これをプログラムにすると以下のようになります。

<cfhttp method="get" url="https://graph.microsoft.com/v1.0/me/" result="myResult">
   <cfhttpparam type="header" name="Authorization" value="Bearer #アクセストークン#" >
</cfhttp>

上記が実行されると、#myResult.FileContent#に応答が格納されています。

 


記事公開日:2022年06月16日
最終更新日:2022年06月16日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.