Giraffe + GitHub OAuth流入AspNet Core重定向循环

时间:2018-05-24 18:15:51

标签: oauth f# asp.net-core-2.0 github-api c#-to-f#

我已经创建了一个测试应用程序,我想在其中使用GitHub Oauth流程,示例代码如下: 路由是这样的:

let webApp =
    logRequest >=> choose [
        GET >=> 
            choose [
                route "/" >=> indexHandler "world"
                route "/login" >=> loginHandler
                route "/signin-github" >=> signinHandler
            ]
        mustBeLoggedIn >=>
            GET >=>
                choose [
                    route "/api" >=> indexHandler "authenticated world"
                ]    
        setStatusCode 404 >=> text "Not Found" ]

当我呼叫/ api时,如果使用/ login路由呼叫 challenge 命令:

let mustBeLoggedIn : HttpHandler =
    requiresAuthentication (redirectTo true "/login")

let loginHandler = 
    challenge "GitHub"

启动流程并且一切似乎进展顺利,直到触发 OnCreatingTicket 事件。由于某种原因,这会导致调用https://api.github.com/user两次。我配置了一个回调路径:

options.CallbackPath <- new PathString("/signin-github")

使用Fiddler,我可以看到上面的url beeing,然后被重定向到/ login(重定向回GitHub,因此循环),我不知道为什么和重定向。 / signin-github不需要身份验证。我添加了一些日志记录,但唯一的路由是/ login,所以看起来重定向是在Giraffe路由完成之前。我不知道。

编辑6/14/2018: 这里的工作解决方案:https://github.com/EelcoMulder/GiraffeOAuth

1 个答案:

答案 0 :(得分:0)

功能编程上的长颈鹿频道上的某个人(damukles)为我解决了这个问题,结果证明这是一个更少而且更多的错误。 mustBeLoggedIn处理程序应如下所示:

    let mustBeLoggedIn : HttpHandler =
        requiresAuthentication (challenge "GitHub")

并且可以删除路由“/ login”和“/ signin-github”,显然auth库的处理比以前更多。我会写一篇关于此的博客,完成后会更新这篇文章。