AzureAuth R包授权码模式连接失败:localhost拒绝连接,设备码模式正常
解决方案
核心原因
授权码模式要求本地端口(此处为1410)监听Azure AD的回调请求,但Posit Workbench的RStudio环境默认不会暴露本地端口,且IDE沙箱环境无法直接启动HTTP服务器接收回调,导致Azure AD无法将授权码传回localhost:1410,触发连接拒绝错误。设备码模式无需本地回调,因此不受影响。
可行解决方法
1. 自定义回调逻辑(推荐)
通过auth_callback参数手动处理认证流程,绕过本地端口监听:
library(AzureAuth) redirect <- "http://localhost:1410" token <- AzureAuth::get_azure_token( "My_Resource", "My_Tenant_ID", "My_App_ID", use_cache = FALSE, auth_type = "authorization_code", authorize_args = list(redirect_uri = redirect), auth_callback = function(url) { cat("请访问以下URL完成认证:\n", url, "\n") cat("认证后复制返回的授权码,粘贴到此处:") readLines("stdin", n = 1) } )
执行后,控制台会输出认证URL,手动在浏览器打开完成认证,将页面返回的授权码粘贴回控制台即可获取令牌。
2. 开放本地端口并调整环境
- 开放RHEL 8防火墙的1410端口:
sudo firewall-cmd --add-port=1410/tcp --permanent sudo firewall-cmd --reload - 调整SELinux策略允许网络连接:
sudo setsebool -P httpd_can_network_connect 1 - 在Posit Workbench中配置端口转发,将本地1410端口映射到可外部访问的地址(需参考Workbench官方文档完成配置)。
3. 修改Azure应用重定向URI
将Azure应用注册的重定向URI改为Posit Workbench的公共访问URL(需确保该URL已在Azure应用的重定向URI列表中添加并验证),然后修改代码中的redirect参数为该URL。
内容的提问来源于stack exchange,提问作者harish ram
相关产品推荐
相关产品推荐

