我正在使用Devise和Doorkeeper构建Rails 7服务器。
我们将支持两组用户,一组是omniauths到amouath提供程序的用户,另一组是对数据库进行身份验证的用户。
我能够对提供者进行oauth,并且我可以添加doorkeeper并使PKCE流基本上工作,但是当我在omniauth回调中时,我似乎松开了启动PKCE流的应用程序。
启动身份验证流的代码正在使用(通过看门人)
resource_owner_authenticator do
current_user || warden.authenticate!(scope: :user)
end
这样就能成功了,我成功地进行了omniauth回调
def omniauth_successful_callback
User.find_with_omniauth(<<request information>>)
redirect_to <<redirect_page_path>>
end
如果我登录到rails应用程序,这很好,但是当我使用PKCE流时,我需要重定向回初始应用程序,但是当我从omniauth回来时,我似乎没有访问权限。
如何使用PKCE流和omniauth以编程方式重定向到正确的应用程序?
我试着寻找看门人令牌,阅读文档,并测试我可以回去完成流我已经硬编码的重定向的应用程序,我正在测试。我好像找不到申请表了。我目前正在尝试将应用程序名称发送到oauth提供程序,以便将其回显给我,这样我就可以获得重定向,但这似乎很麻烦。
我希望我能让某人告诉我在omniauth成功回调期间在哪里可以找到应用程序,这样我就可以重定向到正确的位置
1条答案
按热度按时间vfhzx4xs1#
没有任何支持,你必须构建它,但这并不困难。
当您的客户端在OAuth/OIDC流中到达您的服务器时,并且您希望进一步委托一些下游OAuth提供者来实际执行授权,则由您来存储原始授权请求参数,并在用户从下游OP返回时恢复它们。只需存储整个URL(包括查询字符串),就可以轻松地做到这一点。
您通常会在会话中执行此操作,可能会将请求与某种ID相关联,以便可以确保用户作为同一授权流的一部分返回(而不是用户放弃该流,然后通过其他路径返回)。您可以将该ID发送到state参数中的OP,该参数将不加修改地发送回给您。
这可能就像这样简单:
在您的回调中: