Giraffe + GitHub AspNet Core 重定向循环中的 OAuth 流程
Giraffe + GitHub OAuth flow in AspNet Core redirect loop
我创建了一个测试应用程序,我想在其中使用 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 蜂鸣被调用然后被重定向到 /login(重定向回 GitHub,因此循环)我不知道为什么以及什么重定向. /signin-github 不需要身份验证。我添加了一些日志记录,但唯一调用的路由是 /login,因此重定向似乎是在 Giraffe 路由完成之前。我不知道。
编辑 2018 年 6 月 14 日:
此处的工作解决方案:https://github.com/EelcoMulder/GiraffeOAuth
函数式编程的长颈鹿频道有人(damukles)帮我解决了这个问题,原来是less is and more的情况,是我犯的一个错误。 mustBeLoggedIn 处理程序应如下所示:
let mustBeLoggedIn : HttpHandler =
requiresAuthentication (challenge "GitHub")
并且可以删除路由“/login”和“/signin-github”,显然 auth 库处理的比以前更多。我会写一篇关于这个的博客,完成后会更新这个post。
我创建了一个测试应用程序,我想在其中使用 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 蜂鸣被调用然后被重定向到 /login(重定向回 GitHub,因此循环)我不知道为什么以及什么重定向. /signin-github 不需要身份验证。我添加了一些日志记录,但唯一调用的路由是 /login,因此重定向似乎是在 Giraffe 路由完成之前。我不知道。
编辑 2018 年 6 月 14 日: 此处的工作解决方案:https://github.com/EelcoMulder/GiraffeOAuth
函数式编程的长颈鹿频道有人(damukles)帮我解决了这个问题,原来是less is and more的情况,是我犯的一个错误。 mustBeLoggedIn 处理程序应如下所示:
let mustBeLoggedIn : HttpHandler =
requiresAuthentication (challenge "GitHub")
并且可以删除路由“/login”和“/signin-github”,显然 auth 库处理的比以前更多。我会写一篇关于这个的博客,完成后会更新这个post。