Azure AD授权流访问令牌权限配置:Next.js应用SQL同步401报错
解决方案
1. 修正令牌受众(aud)匹配问题
你当前通过Next-Auth获取的令牌受众大概率是Microsoft Graph(https://graph.microsoft.com),但Azure SQL同步API要求令牌的受众必须是Azure SQL的资源ID:https://database.windows.net/。这也是Postman生成的令牌能正常工作的核心原因——它是针对Azure SQL资源请求的。
修改Next-Auth授权配置里的scope参数,明确添加Azure SQL的资源范围:
params: { scope: "https://database.windows.net/.default User.Read offline_access" },
若需同时访问Microsoft Graph和Azure SQL,可同时包含两个资源的权限范围:
params: { scope: "https://graph.microsoft.com/User.Read https://database.windows.net/.default offline_access" },
2. 确认Azure SQL权限已授予管理员同意
在Azure门户的应用注册页面,找到已添加的**Azure SQL Database (user_impersonation)**权限,检查是否已点击「授予管理员同意」按钮。未授予此同意的话,用户令牌不会包含该权限声明,导致SQL服务无法识别身份。
3. 验证令牌核心字段
用jwt.ms解码Next-Auth获取的access token,重点检查两个字段:
aud:必须等于https://database.windows.net/scp或roles:必须包含user_impersonation权限
如果aud不匹配,说明请求令牌时未指定正确的资源;如果权限不存在,说明管理员同意未配置或scope参数设置错误。
4. 核对Next-Auth的Azure AD Provider配置
若使用Azure AD v1端点,除了scope外,还需在授权参数中添加resource字段:
params: { resource: "https://database.windows.net/", scope: "User.Read offline_access" },
同时确认应用注册的「重定向URI」与Next-Auth配置的callback URL完全一致。
内容的提问来源于stack exchange,提问作者MicBalla
相关产品推荐
相关产品推荐

