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

