providers/azure-devops
AzureDevOpsProfile
参照
Azure DevOps Services REST API 7.0 · プロファイル · 取得
拡張
Record
<string
,any
>
プロパティ
coreAttributes
coreAttributes: {
Avatar: {
value: {
value: string;
};
};
};
Avatar
Avatar: {
value: {
value: string;
};
};
Avatar.value
value: {
value: string;
};
Avatar.value.value
value: string;
displayName
displayName: string;
emailAddress
emailAddress: string;
id
id: string;
default()
default<P>(options): OAuthConfig<P>
型パラメーター
型パラメーター |
---|
P extends AzureDevOpsProfile |
パラメーター
パラメーター | 型 |
---|---|
options | OAuthUserConfig <P > & { scope : string ; } |
戻り値
OAuthConfig
<P
>
非推奨
現在も利用可能ですが、MicrosoftはAzure DevOps OAuthのサポートを終了し、代わりにMicrosoft Entra IDの使用を推奨しています。
ドキュメント
Microsoft ドキュメント · Azure DevOps · OAuth 2.0 を使用した REST API へのアクセスの承認
設定
アプリケーションの登録
必要な詳細情報を提供してください
- 会社名
- アプリケーション名
- アプリケーションのウェブサイト
- 承認コールバックURL
- 本番環境では
https://example.com/api/auth/callback/azure-devops
- 開発環境では
https://localhost/api/auth/callback/azure-devops
- 本番環境では
- 承認されたスコープ
- 最低限必要なのは
ユーザー プロファイル (読み取り)
です
- 最低限必要なのは
「アプリケーションの作成」をクリックします
⚠️
ローカルホストでもHTTPSを使用する必要があります
⚠️
スコープを変更するには、アプリケーションを削除して新しく作成する必要があります
次のデータは次のステップで関連します
- アプリID
- クライアントシークレット(「表示」ボタンをクリックした後、「アプリシークレット」エントリは無視してください)
- 承認済みスコープ
環境変数の設定
.env.local
に以下のエントリを作成します
AZURE_DEVOPS_APP_ID=<copy App ID value here>
AZURE_DEVOPS_CLIENT_SECRET=<copy generated client secret value here>
AZURE_DEVOPS_SCOPE=<copy space separated Authorized Scopes list here>
例
import AzureDevOps from "@auth/core/providers/azure-devops"
...
providers: [
AzureDevOps({
clientId: process.env.AZURE_DEVOPS_APP_ID,
clientSecret: process.env.AZURE_DEVOPS_CLIENT_SECRET,
scope: process.env.AZURE_DEVOPS_SCOPE,
}),
]
...
リフレッシュトークンのローテーション
以下の点を考慮して、メインガイドを参考にしてください
async jwt({ token, user, account }) {
...
// The token has an absolute expiration time
const accessTokenExpires = account.expires_at * 1000
...
}
async function refreshAccessToken(token) {
...
const response = await fetch(
"https://app.vssps.visualstudio.com/oauth2/token",
{
headers: { "Content-Type": "application/x-www-form-urlencoded" },
method: "POST",
body: new URLSearchParams({
client_assertion_type:
"urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
client_assertion: process.env.AZURE_DEVOPS_CLIENT_SECRET,
grant_type: "refresh_token",
assertion: token.refreshToken,
redirect_uri:
process.env.NEXTAUTH_URL + "/api/auth/callback/azure-devops",
}),
}
)
...
// The refreshed token comes with a relative expiration time
const accessTokenExpires = Date.now() + newToken.expires_in * 1000
...
}