Azure active directory 为什么Azure AD(或其他OIDC Idp)在注销后需要输入登录的用户凭据?

Azure active directory 为什么Azure AD(或其他OIDC Idp)在注销后需要输入登录的用户凭据?,azure-active-directory,single-sign-on,owin,openid-connect,okta,Azure Active Directory,Single Sign On,Owin,Openid Connect,Okta,我在我的应用程序中开发了一个由External IDP进行的身份验证。虽然我使用OpenId连接协议支持两个IDP:Azure AD和Okta。我的登录页面有用于输入用户凭据的小部件(用于内置用户和从Active Directory导入的域用户)和两个按钮:“使用Microsoft登录”和“使用Okta登录” 用户第一次被重定向到登录页面并尝试通过Okta(或Azure AD)登录时。如果他在尝试之前已经登录Okta(或Azure AD),他将自动登录我的应用程序,,而无需输入他的凭据(SSO正

我在我的应用程序中开发了一个由External IDP进行的身份验证。虽然我使用OpenId连接协议支持两个IDP:Azure AD和Okta。我的登录页面有用于输入用户凭据的小部件(用于内置用户和从Active Directory导入的域用户)和两个按钮:“使用Microsoft登录”和“使用Okta登录”

用户第一次被重定向到登录页面并尝试通过Okta(或Azure AD)登录时。如果他在尝试之前已经登录Okta(或Azure AD),他将自动登录我的应用程序,而无需输入他的凭据(SSO正在运行)。但是,如果他从我的应用程序注销,下次他将尝试通过Okta登录时,他将被重定向到Okta同意页面,并且需要输入他的凭据

为什么第二次和下一次尝试需要用户的凭据,但不会导致自动登录? 这是SSO概念吗? 我在Asp.NETMVC上开发并使用OWIN(Katana)。
谢谢

用户注销身份提供程序的一个可能原因是,当您调用
注销时,您的代码故意这样做

例如,如果您正在呼叫:

HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Okta,AuthTypes.Cookies);
您明确表示要触发注销
AuthTypes.Cookies
(这可能会清除您应用程序自己的会话Cookies)和
AuthTypes.Okta
(这可能包括重定向到Okta以结束会话并清除那边的Cookies)

如果您只想用您的应用程序结束会话(但不一定要结束用户与身份提供商的会话),当您调用
注销
时,您应该只指明应用程序的身份验证类型:

HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Cookies);

在此之后,当用户再次访问应用程序时,应用程序将不会考虑用户登录(因为当用户的浏览器访问应用程序时,它将不会呈现任何会话cookie)。但是,如果用户再次被发送到Okta或Azure AD,则该用户的身份提供商自己的会话cookie仍将存在,并且他们将能够在没有额外提示的情况下进行SSO


注意:我对如何配置
AuthTypes.Okta
AuthTypes.Cookies
做了一些假设,因为这不包括在问题中。

用户注销身份提供程序的一个可能原因是,当您调用
注销时,您的代码故意这样做

例如,如果您正在呼叫:

HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Okta,AuthTypes.Cookies);
您明确表示要触发注销
AuthTypes.Cookies
(这可能会清除您应用程序自己的会话Cookies)和
AuthTypes.Okta
(这可能包括重定向到Okta以结束会话并清除那边的Cookies)

如果您只想用您的应用程序结束会话(但不一定要结束用户与身份提供商的会话),当您调用
注销
时,您应该只指明应用程序的身份验证类型:

HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Cookies);

在此之后,当用户再次访问应用程序时,应用程序将不会考虑用户登录(因为当用户的浏览器访问应用程序时,它将不会呈现任何会话cookie)。但是,如果用户再次被发送到Okta或Azure AD,则该用户的身份提供商自己的会话cookie仍将存在,并且他们将能够在没有额外提示的情况下进行SSO


注意:我对如何配置
AuthTypes.Okta
AuthTypes.Cookies
做了一些假设,因为这不包括在问题中。

您如何处理注销操作?@JanHudec I清除客户端服务器和应用程序idp Cookies。HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Okta,AuthTypes.Cookies);您如何处理注销操作?@JanHudec I清除客户端服务器和应用程序idp cookies。HttpContext.GetOwinContext().Authentication.SignOut(AuthTypes.Okta,AuthTypes.Cookies);谢谢你的回复!当我注销时,我清除Idp cookies。但是cookies是什么时候创建的呢?我原以为Cookie是在用户首次登录我的应用程序后创建的,但现在我认为Cookie是在用户登录AzureAD/Okta/Google后创建的,当用户首次尝试登录我的应用程序时,这些Cookie提供SSO(用户无需输入凭据),是否正确?大多数身份提供商将在用户登录时通过设置会话cookies为用户维护登录会话。如果身份提供程序支持“单次注销”,则当触发“单次注销”时(通常通过重定向到身份提供程序的注销URL),这些会话cookie将被删除或变为无效,因此,如果用户稍后被发送回身份提供程序,则不会识别该用户已登录,并提示其再次登录。确定,谢谢你的解释!谢谢你的回复!当我注销时,我清除Idp cookies。但是cookies是什么时候创建的呢?我原以为Cookie是在用户首次登录我的应用程序后创建的,但现在我认为Cookie是在用户登录AzureAD/Okta/Google后创建的,当用户首次尝试登录我的应用程序时,这些Cookie提供SSO(用户无需输入凭据),是否正确?大多数身份提供商将在用户登录时通过设置会话cookies为用户维护登录会话。如果身份提供程序支持“单次注销”,当触发“单次注销”时(通常通过重定向到身份提供程序的注销URL),这些会话cookie将被删除或变为无效,因此如果用户被发回