From 8a44fe8855051dae776ae9166c46f394450ce71b Mon Sep 17 00:00:00 2001 From: Anders Abel Date: Thu, 19 Oct 2023 21:47:09 +0200 Subject: [PATCH] MFA --- IdentityServer/v6/docs/content/ui/_index.md | 8 ++++++++ .../v6/docs/content/ui/images/host.png | Bin 0 -> 53297 bytes IdentityServer/v6/docs/content/ui/login/mfa.md | 14 ++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 IdentityServer/v6/docs/content/ui/images/host.png create mode 100644 IdentityServer/v6/docs/content/ui/login/mfa.md diff --git a/IdentityServer/v6/docs/content/ui/_index.md b/IdentityServer/v6/docs/content/ui/_index.md index d542e084..8d88278c 100644 --- a/IdentityServer/v6/docs/content/ui/_index.md +++ b/IdentityServer/v6/docs/content/ui/_index.md @@ -7,6 +7,14 @@ chapter = true # User Interaction and Pages +The design goal of Duende IdentityServer is to supply a full implementation of the OpenID Connect protocol while on the same time be the most flexible and extendible solution. One area that is customized in all deployments of IdentityServer is the user interface. It is typically branded to have the same look and feel as other web sites of the organization. The logic driving the pages is also closely related both to the design and the business rules. To allow full flexibility of the UI, including business rules and user flow, the UI is separated from the core IdentityServer product. + +![Overview](images/host.png) + +To get a quick start with the UI, we provide a [quick start UI]({{< ref "./../quickstarts/2_interactive#add-the-ui">}}) as well as a [quick start UI adapted to Asp.Net Identity]({{< ref "./../quickstarts/5_aspnetid">}}). + +## Required Pages + As browser requests are made to the protocol endpoints in your IdentityServer, they will be redirected to the interactive pages for the user to see. Depending on the features required, the pages expected in your IdentityServer are: * [Login]({{< ref "./login" >}}): allows the user to login. This could be achieved with a local credential, or could utilize an external login provider (e.g. social or enterprise federation system). * [Logout]({{< ref "./logout" >}}): allows the user to logout (including providing single sign-out). diff --git a/IdentityServer/v6/docs/content/ui/images/host.png b/IdentityServer/v6/docs/content/ui/images/host.png new file mode 100644 index 0000000000000000000000000000000000000000..81ae7627d3fe4440525105ef1befc8a47437e50c GIT binary patch literal 53297 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

vE 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 literal 0 HcmV?d00001 diff --git a/IdentityServer/v6/docs/content/ui/login/mfa.md b/IdentityServer/v6/docs/content/ui/login/mfa.md new file mode 100644 index 00000000..88efd076 --- /dev/null +++ b/IdentityServer/v6/docs/content/ui/login/mfa.md @@ -0,0 +1,14 @@ +--- +title: "Multi Factor Authentication" +weight: 50 +--- + +# Multi Factor Authentication + +IdentityServer itself doesn't implement MFA. MFA is of the login which is the [responsibility of the hosting application]({{< ref "..">}}). + +## MFA hosted in IdentityServer +To make the local IdentityServer login page offer MFA anything that works with Asp.Net Core also works with IdentityServer. One approach is to use [Microsoft Asp.Net Identity](https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity) that offers [MFA support](https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-enable-qrcodes). + +## MFA and external authentication +When using Duende IdentityServer as a [federation gateway](../../federation) the user authentication is done on the upstream provider. It is common to let the upstream provider deal with the entire user authentication, including any MFA required. There's no special configuration or implementation needed on IdentityServer in this case, as the upstream provider handles everyting. \ No newline at end of file