如何刷新访问令牌

时间:2018-04-16 07:53:03

标签: c# asp.net-core oauth .net-core identityserver4

我有一个Asp.net 2.0 核心Web应用程序,它连接到Identity Server 4应用程序进行身份验证。还涉及API。 API使用访问令牌作为承载令牌。

我的创业公司:

services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = "Cookies";
                options.Authority = idsEndPoint;
                options.RequireHttpsMetadata = false;
                options.ClientId = "testclient";
                options.ClientSecret = "secret";
                options.ResponseType = "code id_token";
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
                options.Scope.Add("testapi");
            });

控制器:

在我的控制器中,我可以看到我的令牌,并且它们都已填充,我可以在API调用中使用访问令牌。

var accessToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken);
var refreshToken = await HttpContext.GetTokenAsync(IdentityConstants.HttpContextHeaders.RefreshToken);
var idToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.IdToken);

问题:

我的问题发生在访问令牌过期的一小时之后。它似乎不会自动刷新。我想知道这是否是我的身份验证中的设置,将导致它刷新它。但是我一直无法知道如何在访问令牌过期后强制它刷新访问令牌。

我目前的解决方案是自己刷新它,但我认为这将内置于cookie中间件中。

2 个答案:

答案 0 :(得分:0)

这种方法使用OpenIddict,您需要在startup.cs内实现主要配置。下一个链接是此实现的一个很好的例子。希望有用
https://github.com/openiddict/openiddict-samples/tree/dev/samples/RefreshFlow

    dataframe1 = pd.read_csv('your_file_1.csv')
    dataframe2 = pd.read_csv('your_file_2.csv')

    new_dataframe = []

    for i in dataframe2:
        if i['video_url'] not in dataframe1['video_url']:
           new_dataframe.append(i)

答案 1 :(得分:0)

对于自动刷新令牌,请将options.Scope.Add("offline_access");添加到AddOpenIdConnect()选项。