You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:20:39