SAFE-стек с авторизацией на github
Я пытаюсь скрыть все свое приложение за аутентификацией (я буду иметь дело с авторизацией, когда это сработает), и сейчас я хочу, чтобы каждый URL-адрес требовал входа в систему github. У меня не открывается страница входа в github.
Я попытался объединить шаблон стека SAFE и «Использование OAuth с Saturn» , но я не получаю страницу входа в github (которую я получаю, следуя только руководству Saturn), я просто получаю обычную страницу задач. Если я нажму кнопку «Добавить», сервер напечатает
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 POST http://localhost:8085/api/ITodosApi/addTodo application/json; charset=UTF-8 68
info: Microsoft.AspNetCore.Authentication.OAuth.OAuthHandler`1[[Microsoft.AspNetCore.Authentication.OAuth.OAuthOptions, Microsoft.AspNetCore.Authentication.OAuth, Version=3.1.11.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]][12]
AuthenticationScheme: GitHub was challenged.
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 10.8057ms 302
И элемент не добавляется в список todos.
Я попытался сбрить все, кроме бита аутентификации, и по сравнению с чистым безопасным шаблоном единственные изменения, которые я сделал, это
-
dotnet paket add Saturn.Extensions.Authorization --project src/Server/Server.fsproj
- Вручную понизить две зависимости в
paket.lock
что в противном случае создало ошибку:Microsoft.AspNetCore.Authentication.Google
к иMicrosoft.AspNetCore.Authentication.OpenIdConnect
к(3.1.11)
- Изменить
app
стоимость вServer/Server.fs
к следующему (для этой проблемы я создал новое приложение github auth):
let loggedInPipeline = pipeline {
requires_authentication (Giraffe.Auth.challenge "GitHub")
}
let loggedInView = router {
pipe_through loggedInPipeline
get "/" webApp
}
let appRouter = router {
forward "" loggedInView
}
let app =
application {
use_router appRouter
url "http://0.0.0.0:8085/"
memory_cache
use_static "public"
use_gzip
use_github_oauth "8cde657dfd1d3a41b9ed" "0b245e12900ff8486ade076aae07aa0deb0fd83d" "/signin-github" [("login", "githubUsername"); ("name", "fullName")]
}
run app
URL-адрес обратного вызова для аутентификации моего приложения gitHub:
http://localhost:8080/signin-github
2 ответа
Мне помогли решить эту проблему только для AzureAD. Пост в блоге можно найти здесь https://www.compositional-it.com/news-blog/safe-stack-authentication-with-active-directory-part-2/. Должно быть то же самое для github. Что мне нужно было сделать, так это внести некоторые изменения в
webpack.config.js
, а также
build.fsx
webpack.config.js
devServerProxy: {
// redirect all requests to the server on port 8085
'**': {
//...
var CONFIG = {
appHtmlTemplate: './src/Client/app.html',
//...
var commonPlugins = [
new HtmlWebpackPlugin({
filename: 'app.html',
//...
var CONFIG = {
// ... other webpack config settings
outputDir: './src/Server/public',
// ...
devServer: {
// ...other dev server config settings
writeToDisk: true
},
Server.fs
:
let authScheme = "AzureAD"
let isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") = Environments.Development;
let noAuthenticationRequired nxt ctx = task { return! nxt ctx }
let authChallenge : HttpFunc -> HttpContext -> HttpFuncResult =
requiresAuthentication (Auth.challenge authScheme)
let routes =
choose [
route "/" >=> authChallenge >=> htmlFile "public/app.html"
]
build.fsx:
let serverPublicPath = Path.getFullName "./src/Server/public"
let clientPublicPath = Path.getFullName "./src/Client/public"
Target.create "Clean" (fun _ ->
Shell.cleanDir deployDir
Shell.cleanDir serverPublicPath)
Target.create "Run" (fun _ ->
Shell.copyDir serverPublicPath clientPublicPath FileFilter.allFiles
//... other commands
Вам нужно будет использовать браузер, отличный от Chrome, если вы работаете локально, например Firefox, из-за проблемы с файлами cookie, упомянутой ранее.
Рекомендуется открыть окно приватного просмотра, чтобы убедиться, что вы еще не вошли в учетную запись и т. д.
Если у вас возникли проблемы, убедитесь, что у вас есть
- правильно настройте регистрацию вашего приложения в Active Directory в Azure
- добавил необходимую конфигурацию AD на ваш сервер в
appsettings.json
, включая URL-адреса обратного вызова для входа/выхода из системы, которые вы указали при регистрации в AD.
ты пытался
https
вместо
http
для тебя
url
параметр?
Заменять
url "http://0.0.0.0:8085"
с
url "https://0.0.0.0:8085"
Это решило проблему для меня.
Демонстрационный код: https://github.com/functionalfriday/fsharp-saturn-demos .