keycloak不适用于asp.net MVC5 Web应用程序(C#)

穆罕默德·加纳姆(Mohammad Ghanem)

我正在尝试将我的MVC5 Web应用程序与Keycloak服务器v1.98连接。已连接。当我访问我的Web应用程序时,Keycloak要求输入凭据,而当我输入它时,出现以下异常:

我的配置(startup.cs):

public void Configuration(IAppBuilder app)
    {
        const string persistentAuthType = "WebApplication1_cookie_auth";

        // --- Cookie Authentication Middleware - Persists user sessions between requests
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = persistentAuthType
        });
        app.SetDefaultSignInAsAuthenticationType(persistentAuthType); // Cookie is primary session store

        // --- Keycloak Authentication Middleware - Connects to central Keycloak database
        app.UseKeycloakAuthentication(new KeycloakAuthenticationOptions
        {
            // App-Specific Settings
            ClientId = "dotnettest", // *Required*

            VirtualDirectory = "", // Set this if you use a virtual directory when deploying to IIS

            // Instance-Specific Settings
            Realm = "dotnettest", // Don't change this unless told to do so
            KeycloakUrl = "http://127.0.0.1:9090/auth", // Enter your Keycloak URL here

            // Template-Specific Settings
            SignInAsAuthenticationType = persistentAuthType, // Sets the above cookie with the Keycloak data
            AuthenticationType = "WebApplication1_keycloak_auth", // Unique identifier for the auth middleware
            ClientSecret = "187a2ba7-91f9-479f-a290-2b249a64236a"
        });
    }

异常详细信息:

System.Exception: Both the access token and the refresh token have expired

堆栈跟踪:

[Exception: Both the access token and the refresh token have expired]
   KeycloakIdentityModel.<GetClaimsAsync>d__39.MoveNext() +708
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   KeycloakIdentityModel.<ToClaimsIdentityAsync>d__25.MoveNext() +156
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +11522180
   Owin.Security.Keycloak.Middleware.<InvokeAsync>d__1.MoveNext() +1066
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.Owin.Security.Infrastructure.<Invoke>d__0.MoveNext() +445
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +187
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.Owin.Security.Infrastructure.<Invoke>d__0.MoveNext() +653
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +187
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<DoFinalWork>d__2.MoveNext() +185
   Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar) +69
   Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar) +64
   System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +380
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

我遵循了本教程:

https://github.com/dylanplecki/KeycloakOwinAuthentication/wiki/ASP.NET-MVC-Tutorial

谢谢。

穆罕默德·加纳姆(Mohammad Ghanem)

通过将计算机时区编辑为(utc -1:00)可以解决此问题,因为KeycloakOwinAuthentication项目中存在错误,并且该错误已报告给项目开发人员。

您可以通过编辑“ KeycloakIdentity.cs”文件中的“ GetClaimsAsync”方法来比较(UT​​C-1)区域中的当前日期时间来解决此问题。

private async Task<IEnumerable<Claim>> GetClaimsAsync()
        {
            await _refreshLock.WaitAsync();
            try
            {
                // Check to update cached claims, but not if refresh token is missing (as in bearer mode)
                if ((_kcClaims == null || _accessToken.ValidTo <= DateTime.Now) && _refreshToken != null)
                {
                    var info = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
                    DateTimeOffset localServerTime = DateTimeOffset.Now;
                    DateTimeOffset utc = localServerTime.ToUniversalTime();
                    // Validate refresh token expiration
                    if (_refreshToken.ValidTo <= utc.AddHours(-1))
                        throw new Exception("Both the access token and the refresh token have expired");
                    // Load new identity from token endpoint via refresh token
                    await RefreshIdentity(_refreshToken.RawData);
                }
                return GetCurrentClaims();
            }
            finally
            {
                _refreshLock.Release();
            }
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

来自分类Dev

Apache Cordova连接到MVC5中的Asp.net Web应用程序

来自分类Dev

为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

来自分类Dev

为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

来自分类Dev

为什么预先输入不适用于此MVC5应用程序?

来自分类Dev

ASP.NET MVC验证不适用于引导程序模式

来自分类Dev

ASP.NET MVC验证不适用于引导程序模式

来自分类Dev

保存时编译不适用于VS 2015 RC中的ASP.NET 5应用

来自分类Dev

带有路由数据的单元测试不适用于ASP.NET MVC 5 Web API

来自分类Dev

在我的asp.net MVC 4和MVC5 Web应用程序中使用ELMAH

来自分类Dev

异步不适用于大型ASP.NET应用程序,但适用于新应用程序

来自分类Dev

.NET WebForms应用程序会话信息不适用于MVC

来自分类Dev

ASP.NET MVC 分页不适用于 ViewModel

来自分类Dev

如何部署ASP.NET MVC5应用程序的“发布”版本

来自分类Dev

使用Unity的MVC5应用程序内部的ASP.Net Identity 2.1

来自分类Dev

ASP.NET MVC5应用程序综合路由被忽略

来自分类Dev

ASP.NET MVC模型绑定不适用于AJAX GET,但适用于Post

来自分类Dev

ASP.NET MVC - 路由适用于 /home 但不适用于 /home/index

来自分类Dev

Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

来自分类Dev

HttpWebRequest/HttpWebResponse 仅适用于控制台应用程序而不适用于 ASP.NET

来自分类Dev

单元测试ASP.NET MVC5应用

来自分类Dev

Asp.Net MVC 4信用卡验证程序不适用于交换机

来自分类Dev

远程验证不适用于asp.net MVC 5中的部分视图

来自分类Dev

jQuery自动完成功能不适用于ASP.NET MVC 5

来自分类Dev

如何通过刷新同一页面来更改ASP.NET MVC5 Web应用程序当前的本地化文化?

来自分类Dev

将客户端Blazor添加到现有的ASP.NET MVC5应用程序

来自分类Dev

身份:在两个不同的asp.net mvc5应用程序中的身份验证

来自分类Dev

如何将应用程序错误写入ASP.NET MVC5中的文件?

来自分类Dev

angular js,asp.net mvc:$ http仅适用于ApiController而不适用于普通Controller吗?

Related 相关文章

  1. 1

    ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

  2. 2

    Apache Cordova连接到MVC5中的Asp.net Web应用程序

  3. 3

    为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

  4. 4

    为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

  5. 5

    为什么预先输入不适用于此MVC5应用程序?

  6. 6

    ASP.NET MVC验证不适用于引导程序模式

  7. 7

    ASP.NET MVC验证不适用于引导程序模式

  8. 8

    保存时编译不适用于VS 2015 RC中的ASP.NET 5应用

  9. 9

    带有路由数据的单元测试不适用于ASP.NET MVC 5 Web API

  10. 10

    在我的asp.net MVC 4和MVC5 Web应用程序中使用ELMAH

  11. 11

    异步不适用于大型ASP.NET应用程序,但适用于新应用程序

  12. 12

    .NET WebForms应用程序会话信息不适用于MVC

  13. 13

    ASP.NET MVC 分页不适用于 ViewModel

  14. 14

    如何部署ASP.NET MVC5应用程序的“发布”版本

  15. 15

    使用Unity的MVC5应用程序内部的ASP.Net Identity 2.1

  16. 16

    ASP.NET MVC5应用程序综合路由被忽略

  17. 17

    ASP.NET MVC模型绑定不适用于AJAX GET,但适用于Post

  18. 18

    ASP.NET MVC - 路由适用于 /home 但不适用于 /home/index

  19. 19

    Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

  20. 20

    HttpWebRequest/HttpWebResponse 仅适用于控制台应用程序而不适用于 ASP.NET

  21. 21

    单元测试ASP.NET MVC5应用

  22. 22

    Asp.Net MVC 4信用卡验证程序不适用于交换机

  23. 23

    远程验证不适用于asp.net MVC 5中的部分视图

  24. 24

    jQuery自动完成功能不适用于ASP.NET MVC 5

  25. 25

    如何通过刷新同一页面来更改ASP.NET MVC5 Web应用程序当前的本地化文化?

  26. 26

    将客户端Blazor添加到现有的ASP.NET MVC5应用程序

  27. 27

    身份:在两个不同的asp.net mvc5应用程序中的身份验证

  28. 28

    如何将应用程序错误写入ASP.NET MVC5中的文件?

  29. 29

    angular js,asp.net mvc:$ http仅适用于ApiController而不适用于普通Controller吗?

热门标签

归档