Azure AD OAuth认证后自动重定向Shiny应用至本地主机
解决Shiny应用Azure AD认证后自动重定向到本地主机的问题
问题根源
你遇到的AADSTS50011错误,核心原因是Azure AD应用注册中配置的重定向URI,和认证请求里实际发送的URI不匹配。要实现认证后自动跳转至本地主机,需从Azure配置和前端JS代码两方面同步调整。
具体解决方案
1. 在Azure AD应用注册中添加本地重定向URI
- 登录Azure门户,找到你的目标应用注册
- 进入「身份验证」页面,在「单页应用(SPA)」分类下,添加Shiny本地运行的地址,示例:
http://localhost:3838(Shiny默认端口)http://127.0.0.1:3838(本地回环地址备选)
- 保存配置
2. 修改前端JS认证代码,指定重定向URI
在你的MSAL配置或登录请求中,明确添加redirectUri参数,确保和Azure里配置的地址完全一致。修改后的JS代码如下:
async function wrapperFunc() { const msalConfig = { auth: { clientId: 'XXXXXXXXX', authority: 'https://login.microsoftonline.com/XXXXXXXXXXX', redirectUri: 'http://localhost:3838' // 与Azure配置的本地URI保持一致 } }; const msalInstance = new msal.PublicClientApplication(msalConfig); const silentRequest = { scopes: ["api://XXXXXX/session:role-any"] }; const callLogin = async function(silentRequest, msalInstance) { try { const loginResponse = await msalInstance.loginPopup(silentRequest); return loginResponse; } catch (err) { console.log(err) } } response = callLogin(silentRequest, msalInstance); return response; } wrapperFunc().then(result => { Shiny.setInputValue("oauthToken", result['accessToken']); console.log(result['accessToken']); });
3. 固定Shiny应用的运行端口
如果Shiny应用每次启动端口随机,会导致重定向URI匹配失败。启动应用时指定固定端口:
shiny::runApp(port = 3838, host = "0.0.0.0")
确保此处端口和Azure、JS代码中的配置完全一致。
4. 验证流程
修改完成后重启Shiny应用,触发认证流程:
- 登录弹窗完成后,会自动重定向回你的本地Shiny应用地址
- 前端将令牌传递给Shiny后端,可正常调用
pii_db_connection函数连接Snowflake
额外注意事项
- 若使用HTTPS本地测试(如
https://localhost:3838),需在Azure中同步添加对应的HTTPS重定向URI - 生产环境部署时,需将重定向URI替换为正式域名,并同步更新Azure配置
内容的提问来源于stack exchange,提问作者Dieu94
相关产品推荐
相关产品推荐

