如何使用OWIN获取id_token的密钥斗篷?

时间:2020-09-21 12:38:33

标签: c# owin keycloak

我正在使用一个非常老的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
            }
        }
    );
}

0 个答案:

没有答案