我已经使用KMSI(保持登录状态)选项创建了azure ad b2c自定义登录策略,并将其用于blazor服务器应用程序中,
但是在关闭浏览器后自动登录不起作用,需要单击“登录”按钮。
如果在上一次登录时选中了KMSI复选框,则单击登录按钮后无需再次输入凭据。
但是,如果我在登录KMSI时选中了复选框,我想自动登录。
答案 0 :(得分:0)
您是否可以检查应用程序发送到Azure AD B2C的授权请求,其中是否包含prompt=login
查询字符串参数?如果是,请确保删除此参数。
答案 1 :(得分:0)
这是预料之中的,您的应用程序cookie不会持久存在,因此该应用程序不知道您是否仍在B2C上登录。因此,您必须在应用程序中单击“登录”,然后才能通过AAD B2C获得SSO。
您可以维护应用程序设置的cookie,以便如果用户先前已使用KMSI登录,则可以通过登录端点自动发送用户。您可以使用索赔解析器将KMSI索赔发送到令牌中,以便您的应用可以理解使用KMSI登录的用户。 https://docs.microsoft.com/en-us/azure/active-directory-b2c/claim-resolver-overview
答案 2 :(得分:0)
我已经测试了KMSI的功能,可以重现您的症状。我的测试基于以下演示:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi 这是我的测试过程如下:
由于存在该cookie,B2C会向我提供我请求的资源:b2c端发送一个请求,以重定向带有ID令牌和代码的URL:
总而言之,这里有两种会话:用户与B2C之间的会话以及用户与您的应用程序之间的会话。 关闭浏览器后,默认情况下,您将丢失该用户在应用程序上的cookie,因此用户在重新打开浏览器后无需访问您的应用程序即可访问某些页面,而无需对您的应用程序进行身份验证,就不会有cookie,您的应用程序不认识该用户。但是在B2C方面,由于KMSI,该cookie将保留在那里。只有用户请求某些功能需要在您的应用程序上进行身份验证,用户将被重定向到B2C域,而B2C会将用户的信息发送到您的应用程序将使KMSI正常工作。
我认为,也许延长应用程序cookie的生存期将是解决方案。同时,您还需要扩展会话超时,以确保您的应用程序可以识别该使用寿命长的cookie。但是我们知道,如果服务器RAM容纳大量会话,这将是一个很大的消耗。