# 連携先アプリの認証エラー

## 認証作成エラー

エンドユーザーがウィザードでの認証の作成に失敗する場合は、エンドユーザーに対しその場ですぐにエラーメッセージが表示されます。エンドユーザーはベンダーに問い合わせをする等によりトラブルシュートをすることができます。

<figure><img src="/files/6J1dJI8JVvttQy0kWBvH" alt="" width="563"><figcaption></figcaption></figure>

***

## 認証無効エラー

連携先アプリによっては、トークンをリフレッシュする仕組みがないなどの理由により、アクセストークン等の有効期限が切れると認証が無効となりAPIの呼出がエラーとなります。

それ以外にも、連携先アプリの何らかの仕組みにより認可が取り消される等でアクセストークンが無効化された場合にも認証は無効になります。

### Anyflowの仕様

基本的に、Anyflowから連携先アプリにリクエストを行った際、

* `401`( 認証情報が無効 )
* `403` ( 権限エラー )

のステータスコードが返却された場合に、Anyflowでは認証が無効になったと判定しアクセストークン等を破棄（リボーク）します。

より詳細には、

* リフレッシュ機構をもつアプリの場合：リフレッシュ時のレスポンスが 401 等だった場合にリボーク
* リフレッシュ機構をもたないアプリの場合：アクション（レコードの取得等）のレスポンスが 401 等だった場合にリボーク

認証が無効となった場合、Anyflowシステムから連携先アプリのAPIを実行できないため、ソリューションは失敗します。

ソリューションを有効にするには、以下の方法に沿ってエンドユーザーが解決を行う必要があります。<br>

***

## 認証無効エラーの検知方法

### イベント通知

[イベント通知](/ops/event-notification.md)を設定することで、ご利用中のツールに認証無効エラー発生の情報を通知することができます。

<figure><img src="https://files.readme.io/4bee49d58497297498523b4001c670ca329a95bb6f98ce04217fa36eec4e6ea5-image.png" alt="Slackで通知した場合のイメージ" width="375"><figcaption><p>Slackで通知した場合のイメージ</p></figcaption></figure>

**通知される情報**

* 該当のユーザーのインストール一覧へのリンク
* アプリ名
* 無効になったソリューションへのリンク

上記の情報を踏まえて、エンドユーザーに適切な案内を送付してください。

### Anyflowからの自動メール

エンドユーザーに再認証を促すメールをAnyflowから自動送信できます。\
（メールは `[email protected]` から送信されます。）

チームインテグレーションを利用している場合、JWTペイロードの `anyflow_team_email` に設定してあるメールアドレスに、ユーザーインテグレーションを利用している場合は `anyflow_user_email` にメールが送信されます。

送信されるメールのテンプレートは、ベンダーにて設定することができます。

{% hint style="warning" %}

### ヒント

デフォルトでは、メール送信機能は**無効**です。\
メール送信を有効にする場合は、Anyflow CSチームへご連絡ください。\
その際、以下のテンプレート内容もお知らせください。
{% endhint %}

#### テンプレートで利用できる変数

<table><thead><tr><th width="259.40234375">項目</th><th width="230.58203125">テンプレート変数</th><th>例</th></tr></thead><tbody><tr><td>エンドユーザーメールアドレス</td><td>{$end_user_email$}</td><td>user@example.com</td></tr><tr><td>エンドユーザーチーム名</td><td>{$end_user_team_name$}</td><td>Example Inc.</td></tr><tr><td>ソリューション名</td><td>{$solution_name$}</td><td>GoogleDriveにファイルがアップロードされたら請求書サービスに取り込む</td></tr><tr><td>認証エラーになったアプリ名</td><td>{$app_name$}</td><td>GoogleDrive, Salesforce, Slack等</td></tr><tr><td>ソリューションID</td><td>{$solution_id$}</td><td>6dcc67b8-9c8a-4c61-bc7d-f977272573d2</td></tr></tbody></table>

#### テンプレートの例

件名：

```
{$solution_name$}で認証エラーが発生しました。
```

本文：

```
いつも [サービス名] をご利用いただきありがとうございます。

お使いの「{$solution_name$}」の、「{$app_name$}」で認証エラーが発生しました。
認証の期限が切れた可能性があるため、連携をOFFにしています。

以下のリンクより再度認証いただくことで、連携ソリューションが再稼働します。

[連携を設定する画面のURL]

連携ソリューション: {$solution_name$}
認証エラーになったアプリ: {$app_name$}

-------------------------------------------------
このメールは [サービス名] の連携ソリューションをご利用いただいているお客さまに送信しています。
*このメールアドレスは送信専用のため、返信できませんのでご了承ください。
```

***

## 再認証の方法

認証無効エラーが発生した場合、エンドユーザーは改めてウィザードから認証（コネクション）を追加することができます。

<figure><img src="https://files.readme.io/328acf0-image.png" alt="改めて「新しい認証を追加」を実施できます" width="563"><figcaption><p>改めて「新しい認証を追加」を実施できます</p></figcaption></figure>

エンドユーザーが複数の認証を作成している場合は、上記の「新しい認証を追加」の表示ではなく、\
以下の通り別のコネクションの名前が表示されます。

<figure><img src="https://files.readme.io/9037b9f-image.png" alt="SlackBot #3 が 認証エラーになり＃2 が表示されている" width="600"><figcaption><p>SlackBot #3 が 認証エラーのため削除され、＃2 が表示されている</p></figcaption></figure>

プルダウンから「新しいコネクションを追加する」を選び、新規のコネクション（認証）を追加することもできます。

<figure><img src="https://files.readme.io/55f4e13-image.png" alt="プルダウンから「新しいコネクションを追加する」を選択" width="375"><figcaption><p>プルダウンから「新しいコネクションを追加する」を選択</p></figcaption></figure>

{% hint style="warning" %}
上記のケースでは、ソリューションの有効状態は`disabled`になっています。（ソリューションはインストールされているものの、有効にされていない状態）

再度ソリューションを有効にするにはSDKの[enableSolution メソッド](/anyflow-sdk/docs.md#enable-solution)を使って有効状態を`enabled`に戻すように実装してください。
{% endhint %}

***

## ソリューション更新によりスコープ不足となった場合

以下の様に再認証ボタンが表示される場合は、アクセストークン等の有効期限が切れていることが原因ではなく、許可されたスコープが不足していることが原因です。

<figure><img src="https://files.readme.io/967654e-image.png" alt="スコープが不足している場合の表示" width="563"><figcaption><p>スコープが不足している場合の表示</p></figcaption></figure>

例えばSlackを使った2つのソリューションをエンドユーザーに提供していたとします。

* ソリューション1：Slackの「読み取り」を行う
* ソリューション2：Slackの「読み取り」と「書き込み」を行う

エンドユーザーがソリューション1を利用する際に認証を行った場合、コネクションに付与されるスコープは「読み取り」となります。

その後、エンドユーザーがソリューション2を利用しようとした場合には、「書き込み」のスコープが不足しているため再認証のボタンが表示され、コネクションのスコープを変更することができます。

このケースではソリューションの有効状態は自動的には変更されません。\
元々disabledであればdisabledのまま、enabledであればenabledのままとなります。

有効状態の変更は必要に応じてSDKの[enableSolution / disableSolution メソッド](/anyflow-sdk/docs.md#enable-solution)を使って実施してください。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-embed.anyflow.jp/ops/solution-error/auth-error.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
