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

Rails集成Azure AD SSO报错:Not found. Authentication passthru

问题描述

我正在为Rails应用配置Azure AD单点登录(SSO),已按照Devise OmniAuth AzureAD的官方文档完成所有步骤,但点击登录链接时出现以下错误:

URL - http://localhost:3000/users/auth/microsoft?prompt=select_account
Message - Not found. Authentication passthru.

我尝试过添加tenant_id以及使用common流程,但都没有效果。预期点击登录链接后会重定向到Azure AD进行身份验证并完成登录流程。

可能的解决步骤
  • 确认OmniAuth策略名称匹配
    检查Devise配置与登录链接中的策略名称是否一致。如果配置的是:azure_activedirectory_v2,但登录链接用的是/users/auth/microsoft,就会触发该错误。确保路由路径和策略名称对应:要么将登录链接改为/users/auth/azure_activedirectory_v2,要么在初始化器里为策略设置name: :microsoft。

  • 验证OmniAuth初始化配置
    检查config/initializers/devise.rb中的OmniAuth配置是否正确加载,确保包含Azure AD策略,示例配置如下:

    config.omniauth :azure_activedirectory_v2,
      client_id: ENV['AZURE_CLIENT_ID'],
      client_secret: ENV['AZURE_CLIENT_SECRET'],
      tenant_id: ENV['AZURE_TENANT_ID'] # 或使用 'common'
    

    同时确认Gemfile中已添加omniauth-azure-activedirectory-v2并执行过bundle install。

  • 检查Devise路由与回调控制器
    确保config/routes.rb中Devise路由包含omniauth_providers配置:

    devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
    

    同时确认已创建回调控制器app/controllers/users/omniauth_callbacks_controller.rb,并包含基础回调方法:

    class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
      def azure_activedirectory_v2
        @user = User.from_omniauth(request.env['omniauth.auth'])
        sign_in_and_redirect @user, event: :authentication
      end
    end
    
  • 清除缓存并重启服务器
    修改配置后执行rails cache:clear,并重启Rails服务器,确保新配置生效。

  • 核对Azure AD应用注册设置
    检查Azure AD应用注册中的重定向URI是否正确设置为http://localhost:3000/users/auth/azure_activedirectory_v2/callback(或对应策略名称的回调路径),同时确认应用已启用所需的OAuth2权限。

内容的提问来源于stack exchange,提问作者Purusottam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:25:24