## 概要
[[🦉Fenice]]では[[Slack Web API]]を[[OAuth 2.0]]を使って利用している。ただ、[[Slackのアクセストークンはデフォルトで有効期限が設定されていない]]ため、[[アクセストークン (OAuth 2.0)|アクセストークン]]の漏洩に対して脆弱な状態となっている。
設定すれば期限を12時間にできるみたいなので、以下の順で対応していきたい。
1. [[Slackのアクセストークンに期限を設定]]する
2. [[リフレッシュトークン (OAuth 2.0)|リフレッシュトークン]]で[[アクセストークン (OAuth 2.0)|アクセストークン]]を更新する
## アクセストークンに期限を設定する
[[Slack API]]の管理ページから。
![[Pasted image 20240413194557.png]]
以下のようになっていればOKのはず。おそらく12時間後に切れる。
![[Pasted image 20240413194718.png]]
`oauth.v2.access`のAPI結果で `authed_user`に`expires_in`が含まれていればOK。また、[[アクセストークン (OAuth 2.0)|アクセストークン]]と[[リフレッシュトークン (OAuth 2.0)|リフレッシュトークン]]は`xoxe-`開始になっている。
## リフレッシュトークンでアクセストークンを更新する
以下のAPIを使ってやってみる。
<div class="link-card">
<div class="link-card-header">
<img src="https://a.slack-edge.com/80588/marketing/img/meta/favicon-32.png" class="link-card-site-icon"/>
<span class="link-card-site-name">Slack API</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">oauth.v2.access API method</p>
<p class="link-card-description">Exchanges a temporary OAuth verifier code for an access token.</p>
</div>
<img src="https://a.slack-edge.com/80588/img/services/api_200.png" class="link-card-image" />
</div>
<a href="https://api.slack.com/methods/oauth.v2.access"></a>
</div>
> When you use grant_type=refresh_token and pass your refresh_token as an argument, this method refreshes an access token, whether bot or user. Read our guide to token rotation for more information.
以下をリクエストすることで、[[アクセストークン (OAuth 2.0)|アクセストークン]]と[[リフレッシュトークン (OAuth 2.0)|リフレッシュトークン]]を更新できる。
- `grant_type`に`refresh_token`を指定
- `refresh_token`に[[リフレッシュトークン (OAuth 2.0)|リフレッシュトークン]]を指定