我正在使用一个非常老的VB.net应用程序,尝试使用OWIN和KeyCloak在SSO身份验证中分层。这对我来说是全新的。我采用的方法是创建一个C#应用程序,使其位于KeyCloak和我的VB应用程序之间。我已经能够使我的C#应用程序打开KeyCloak的登录屏幕,进行身份验证并返回到C#应用程序甚至VB应用程序。看起来不错。
但是,我需要id_token和用户名才能传递到VB应用程序。使用Fiddler时,我可以看到KeyCloak生成了一条返回到我的返回页面的帖子,其中id_token处于拖曳状态。但是,它在另一个线程上并被重定向到原始页面,但没有id_token。我肯定错过了什么。我已经看到了在其中连接了通知的代码,我认为它们应该获取令牌和用户信息,但是我不知道如何使通知生效。没有明确的文档可以告诉我该怎么做。
我应该有一个侦听器或回调方法来捕获KeyCloak的帖子吗?如果可以,有人可以告诉我如何创建一个吗?
注意:我发现一些使用OWIN和Azure和MVC的Microsoft代码可以带回用户信息。但是,我将同一代码指向KeyCloak进行身份验证,但没有返回用户信息。
任何帮助将不胜感激。
-谢谢
在我的Startup.cs文件中,我有以下内容(我尝试了许多不同的变体但无济于事):
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(
CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// Sets the ClientId, authority, RedirectUri as obtained from web.config
ClientId = _clientId,
ClientSecret = _clientSecret,
RequireHttpsMetadata = false,
Authority = _authority,
RedirectUri = _redirectUri,
// PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it is using the home page
PostLogoutRedirectUri = _redirectUri,
Scope = OpenIdConnectScope.OpenIdProfile,
// ResponseType is set to request the id_token - which contains basic information about the signed-in user
ResponseType = OpenIdConnectResponseType.IdToken,
// ValidateIssuer set to false to allow personal and work accounts from any organization to sign in to your application
// To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name
// To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true
},
// OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to OnAuthenticationFailed method
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
SecurityTokenReceived = OnSecurityTokenReceived
}
}
);
}