首先,我想道歉,因为这是我的第一篇帖子,我甚至不知道如何正确表达我的问题。
以下是发生的事情:
我有几个在VB.NET中构建的早期ASP.NET web表单应用程序(.NET Framework 4.6.1(,它们当前使用ASP.NET成员身份提供程序和表单身份验证。基本上,应用程序A、B和C重定向到应用程序D上的登录屏幕,用户在那里登录,然后重定向回来。我相信这可以通过表单身份验证实现,其中所有应用程序在Web.config中共享相同的machineKey。
我使用ASP.NET Identity创建了一个新的ASP.NET Core MVC应用程序(.NET Core 3.1(来取代应用程序D,该应用程序将来也将使用IdentityServer4来支持第三方客户端的单点登录。这个新的SSO应用程序有新的用户屏幕来管理用户/角色等,并且作为一个独立的站点运行得很好。
如何让应用程序A、B和C正确重定向到SSO,以便用户可以获得身份验证并重定向回?这里的正确方法是什么?需要采取哪些步骤?
我花了几个星期的时间在网上学习教程,学习IdentityServer4,创建新的现代MVC网站,使用OWIN交换令牌,等等,一切都很好。我还看到了将ASP.NET成员身份转换为OWIN或Identity的教程,但这真的是我需要的吗?我有一个新网站已经在使用Identity了,所以我不应该这样做,对吧?
想法?
我设法弄明白了。使用一个新的ASP.NET Web应用程序(.NET Framework(-Visual Basic和.NET Framework 4.6.1,名为VBWebApp,我做了以下操作,使其连接到我的IdentityServer4实例:
-
安装包
安装包Microsoft.Owin.Host.SystemWeb安装程序包Microsoft.Owin.Security.Cookies安装包Microsoft.Owin.Security.OpenIdConnect
-
添加Startup.vb
导入Microsoft.Owin.Extensions导入Microsoft.Owin.Security.Cookies导入Microsoft.Owin.Security.OpenIdConnect进口Owin
公共类启动公共子配置(ByVal应用程序作为IAppBuilder(Dim settings As NameValueCollection=ConfigurationManager.AppSettings
app.UseCookieAuthentication(New CookieAuthenticationOptions With { .AuthenticationType = "cookie" }) app.UseOpenIdConnectAuthentication(New OpenIdConnectAuthenticationOptions With { .SignInAsAuthenticationType = "cookie", .Authority = settings("Authority").ToString(), .ClientId = settings("ClientId").ToString(), .ClientSecret = settings("ClientSecret").ToString(), .RedirectUri = settings("RedirectUri").ToString(), .ResponseType = "code", .Scope = "openid profile", .RedeemCode = True }) app.UseStageMarker(PipelineStage.Authenticate) End Sub
终端类
-
在web.config 的Configuration标记下添加以下内容
-
在system.web标签中添加以下内容
-
在IdentityServer4实例中的Config.cs中添加以下内容
新客户端{ClientId=";VBWebApp";,ClientSecrets={new Secret("Secret".Sha256(((},AllowedGrantTypes=GrantTypes.Code,RedirectUris={quot;https://localhost:44375"},PostLogoutRedirectUris={"https://localhost:44375"},AllowedScopes=新列表{IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants.StandardScopes.Profile,}}
还有更多的工作要做,但至少现在我已经具备了为应用程序A、B和C进行身份验证所需的步骤。