标签: refresh-token

RxJava:同时发送多个请求时如何刷新令牌?

我有一个应用程序,它使用 OAuth2 进行身份验证并使用 Retrofit 从 RESTful 服务中获取数据。现在,我有令牌检索并刷新并运行。令牌像这样刷新(省略了调度程序):

// Each Retrofit call observable is "wrapper" using this method
protected <T> Observable<T> wrap(@NonNull final Observable<T> page) {
    return authenticate()
        .concatMap(token -> page)
        .onErrorResumeNext(throwable -> {
            Log.w(TAG, "wrap: ErrorResumeNext", throwable);
            return refreshAccessToken()
                .flatMap(accessToken -> page);
        }));
}

// Retrieves the access token if necessary
Observable<AccessToken> authenticate() {
    // Already have token
    if(accessToken != null) return Observable.just(accessToken);
    // No token yet, fetch it
    return api.getAccessToken(...);
}

// Refreshes the token
Observable<AccessToken> refreshAccessToken() {
    return …
Run Code Online (Sandbox Code Playgroud)

android oauth-2.0 rx-java retrofit2 refresh-token

5
推荐指数
1
解决办法
1123
查看次数

Firebase 刷新令牌过期

在使用 Firebase 的 REST API 测试我们的一个产品(一个 Web 应用程序)的安全性时,当我们意识到在 Firebase 实现的 V3 中刷新令牌永不过期,允许任何刷新令牌永远创建新令牌时,我们感到惊讶.

虽然本地存储今天似乎是一个相当安全的解决方案,但我们担心它明天可能会失败,即使是很短的时间,而且我们无法阻止某人使用任何这些刷新令牌。

两因素身份验证将有助于缓解该问题,但第一步将受到损害。

有没有办法使用 Firebase 将令牌或类似行为列入黑名单,而无需我们自己处理所有令牌交换,例如铸造?我们在浏览文档时找不到这样的功能。

任何建议表示赞赏。

token local-storage firebase refresh-token

5
推荐指数
2
解决办法
9612
查看次数

Keycloak 注销端点不删除会话

你好,其他程序,我被keycloak的问题困住了。我正在尝试从 node.js express 框架请求向 keycloak 发送以注销用户。

Config.keycloakClient = my_realm
Config.keycloakURL = keycloak URL
request.get({
    //url: join(Config.keycloakURL, '/auth/realms/'+ Config.keycloakClient+ '/protocol/openid-connect/logout?' + 'id_token_hint='+req.headers.oidc_access_token), <--- tried this
      url: join(Config.keycloakURL, '/auth/realms/'+ Config.keycloakClient+ '/protocol/openid-connect/logout'), // <-- i also tried this 
      headers:
         { Authorization: "Bearer " + req.headers.oidc_access_token, // <-- also tried Authorization: req.headers.oidc_access_token }
Run Code Online (Sandbox Code Playgroud)

结果 - 200 OK,但我仍然可以在管理界面的活动会话中看到活动会话

request.post({
    //url: join(Config.keycloakURL, '/auth/realms/'+ Config.keycloakClient+ '/protocol/openid-connect/logout?' + 'id_token_hint='+req.headers.oidc_access_token), <--- tried this
      url: join(Config.keycloakURL, '/auth/realms/'+ Config.keycloakClient+ '/protocol/openid-connect/logout'), // <-- i also tried this 
      headers:
          { Authorization: "Bearer " …
Run Code Online (Sandbox Code Playgroud)

session jboss redhat keycloak refresh-token

5
推荐指数
0
解决办法
3733
查看次数

刷新令牌被 Laravel Passport 中的访问令牌撤销

我正在使用laravel/passport password_grant进行身份验证。整个生成access_tokenrefresh_token过程工作正常。现在我正在尝试使用 Laravel 护照令牌事件来撤销旧令牌。

我参考了这篇文章的过程 - https://laracasts.com/discuss/channels/laravel/laravel-passport-revoke-and-prune-event-listener-is-not-doing-anything

这有效......但是当access token使用先前提供的刷新时refresh tokenaccess token正在创建一个新的并创建一个新的refresh token存在。最终,在撤销 old 时access token, old, not expiredrefresh token也被撤销。

但我认为,refresh token只有在它到期时才必须撤销。

而且当我EventListenersApp\Providers\EventServiceProvider $listen array 中删除时,撤销机制仍然有效。

这就像拔掉插头灯泡仍然亮着一样。

如何解决这个问题?还是我在某个地方的概念有误?

authentication access-token laravel refresh-token laravel-passport

5
推荐指数
1
解决办法
3262
查看次数

在 OAuth 2.0 资源所有者密码凭据授权期间向公共客户端提供刷新令牌是否可以?

我的场景

我有以下软件片段/部分:

  • 具有 Windows 服务的专用服务器,该服务通过 OAuth 2.0 授权公开 REST API。
  • 类型 1 客户端:使用 REST API 的不同服务器上的服务。只有组织管理员才能访问这些服务器。
  • 类型 2 客户端:调用 REST API 的桌面应用程序。

根据 RFC 6749,类型 1 客户端是机密的,类型 2 客户端是公开的。

已决定在第一个版本中对两种类型的客户端使用资源所有者密码凭据授权。对于类型 1 客户端来说,这似乎没问题,因为它们能够维护其凭据的机密性,并且无法使用授权代码授予(没有交互式用户)。

授权详情

  • 授权端点将访问令牌和刷新令牌返回给类型 1 和类型 2 客户端。
  • 所有客户端(类型 1 和类型 2)都可以使用刷新令牌来获取新的访问和刷新令牌。

问题/困境/问题

公共客户没有秘密。这意味着如果任何人获得刷新令牌和客户端 ID(最后一个不安全),那么他可以使用它来获取新的访问令牌并使用 REST API。

  1. 从安全角度来看,可以为类型 2 客户端(公共)生成刷新令牌吗?或者,如果使用资源所有者密码凭据授权授予,我不得返回刷新令牌以及类型 2 客户端的访问令牌。
  2. 2 类客户,他们真的是公开的吗?我可以将桌面客户端视为机密并为其生成机密吗?桌面应用程序将从配置文件中读取客户端机密(将使用 AES 256 加密),该文件由管理员分发给组织网络内的用户计算机?

rest oauth-2.0 refresh-token

5
推荐指数
1
解决办法
2173
查看次数

使用 Google Chrome 扩展存储 OAuth 2.0 访问/刷新令牌的最佳实践?

我正在创建一个 Google Chrome 扩展程序,它将上传按钮添加到 Instagram 个人资料页面上的图像。扩展程序将上传到的服务是 Imgur。

由于我最终希望用户能够上传到其帐户上的特定 Imgur 相册,因此我需要从 Imgur API 获取 OAuth 访问令牌。

为此,我做了以下工作。单击浏览器中的扩展图标时,它会打开一个新选项卡(而不是弹出窗口)。此选项卡将打开index.html。单击该页面上的登录按钮将调用授权 URL。

但是,一旦收到访问/刷新令牌,我应该在哪里安全地存储它们呢?我不认为我可以将它们放在localStorage中,因为据我所知,每个origin都有自己的localStorage。

对于像我这样的 Chrome 扩展,存储 OAuth 2.0 访问令牌和刷新令牌的最佳实践是什么?

// oauth.js
let loginStatus = false;

if (!loginStatus) {
    createElement("p", "You are not logged in to Imgur.", "login-status");
    createElement("button", "Login to Imgur", "login-status", loginToImgur);
} else {
    createElement("p", "You are successfully logged in to Imgur.", "login-status");
    createElement("button", "Signout of Imgur", "login-status", function() {
        alert("this is a placeholder");
    });
}

function createElement(type, text, parentId, onclick) { …
Run Code Online (Sandbox Code Playgroud)

local-storage google-chrome-extension access-token oauth-2.0 refresh-token

5
推荐指数
0
解决办法
1249
查看次数

如何使用适用于 iOS (Swift) 的开发工具包 - Amazon Cognito 检查刷新令牌是否过期?

如何使用适用于 iOS 的开发工具包 - Amazon Cognito 检查刷新令牌是否过期?

在 Amazon Cognito 上设置了刷新令牌到期日。

我在刷新令牌到期日期后尝试了它们。

user!.isSignedIn
user!.getSession().result
Run Code Online (Sandbox Code Playgroud)

然而,它们似乎不适用于检查刷新令牌是否过期。

如果您能给我任何建议或提示,请告诉我。我真的很感激。先感谢您。

ios swift amazon-cognito refresh-token

5
推荐指数
0
解决办法
501
查看次数

如何修复“AADSTS90102:‘redirect_uri’值必须是有效的绝对 Uri。” Microsoft Graph 中的错误

按照此过程操作: https://learn.microsoft.com/en-us/graph/auth-v2-user

我正在尝试从此 Microsoft 端点获取刷新令牌: https://login.microsoftonline.com/ {tenantId}/oauth2/v2.0/authorize

使用nuget (asp.net core 2.2) 库中System.Net.Http.HttpClient类的 PostAsync 方法,我能够收到以下错误的响应:“AADSTS90102:'redirect_uri'值必须是有效的绝对 Uri。 ” : https://i.imgur.com/LhP5kYf.png

我尝试在 Azure 门户中设置一些重定向 url,包括: https://automation.legroupeti.com/Configurations/GetRefreshToken/ https://automation.legroupeti.com/Configurations/GetRefreshToken https://automation.legroupeti.com/ https://automation.legroupeti.com

post 请求如下(使用nuget (asp.net core 2.2) 中System.Net.Http.HttpClient类的 PostAsync 方法): https://i.imgur.com/PI4mo8Y.png

以下是在 Azure 门户中注册的应用程序配置的重定向 URL: https://i.imgur.com/aqYDJhn.png

我期望来自端点的有效响应。如何配置redirect_uri才有效?

编辑1

我修复了redirect_uri参数。

dotnet-httpclient azure-active-directory asp.net-core refresh-token microsoft-graph-api

5
推荐指数
2
解决办法
3万
查看次数

如何使用 OpenIddict 使刷新/注销刷新和访问令牌无效(使用内存数据库)

我有一个使用 OpenIddict 的 .NET Core 2.1 Web API 项目。

TLDR:按照此处给出的示例,我需要用于执行注销请求以使一个用户的刷新令牌和访问令牌无效/注销的示例。

长版:

它涉及多个 API 用户使用用户名和密码检索访问令牌 + 刷新令牌。我正在寻找一种可能性,可以使具有有效访问/刷新令牌的特定 API 用户的两个令牌失效/注销。

我在尝试编写一条用于使用单个用户的当前刷新令牌“注销”访问令牌和刷新令牌的路线时迷失了。

我们不使用 SignInManager。我在网上看到了几个例子。但我没有找到任何与我们简单的内存方法相匹配的东西。TokenManager 没有 SignOut 方法。

Startup.cs 上的 ConfigureServices() 部分如下所示:

services.AddDbContext<DbContext>(options =>
{
    options.UseInMemoryDatabase(nameof(DbContext));
    options.UseOpenIddict();
});

services.AddOpenIddict().AddCore(options =>
{
    options.UseEntityFrameworkCore().UseDbContext<DbContext>();
});

services.AddOpenIddict().AddServer(options =>
{
    options.UseMvc();

    options.EnableTokenEndpoint("/api/token").EnableLogoutEndpoint("/api/logout");

    options.AllowPasswordFlow();
    options.AllowRefreshTokenFlow();
    options.SetAccessTokenLifetime(TimeSpan.FromSeconds(60 * 60));
    options.SetRefreshTokenLifetime(TimeSpan.FromSeconds(7 * 24 * 60 * 60));
    options.RegisterScopes(OpenIdConnectConstants.Scopes.OfflineAccess);

    options.DisableHttpsRequirement();
    options.UseRollingTokens();
    options.AcceptAnonymousClients();
});

services.AddOpenIddict().AddValidation();

services.AddAuthentication(options =>
{
    options.DefaultScheme = OAuthValidationDefaults.AuthenticationScheme;
});
Run Code Online (Sandbox Code Playgroud)

检索访问令牌和使用刷新令牌工作得很好。

但是我在注销路由中使用什么?

    [HttpGet]
    [Route("/api/logout")]
    public async Task<IActionResult> LogoutAsync(OpenIdConnectRequest logoutRequest) …
Run Code Online (Sandbox Code Playgroud)

c# logout asp.net-core openiddict refresh-token

5
推荐指数
0
解决办法
2794
查看次数

Spring Secuity 5:保留并访问 Oauth2 刷新令牌

我的 Spring Boot 客户端应用程序如何访问 Spring Security 5 中由 Google 等提供的刷新令牌?

很简单的问题。远程授权服务器(例如Google)发送刷新令牌,我想使用它。在 Spring Security 5 中保存和检索它的最佳方法是什么?

似乎这个答案这个问题这个外部链接描述了一种自从 Oauth2 成为 Spring Security 5 中的一等公民以来不再兼容的方法。

语境:

刷新令牌允许客户端应用程序在用户会话过期后继续访问资源。根据 Google 的文档,刷新令牌应该是持久的:

应用程序应存储刷新令牌以供将来使用,并使用访问令牌来访问 Google API。

Spring security 以OAuth2AuthenticationToken的形式广泛提供访问令牌,但其中不包含刷新令牌。

OidcUserService刷新令牌在(或覆盖它的类)中也不可用,因为public OidcUser loadUser(OidcUserRequest userRequest)无权访问刷新令牌。这很糟糕,因为最好使用自定义类覆盖 OidcUserService,该自定义类从 OIDC 用户详细信息中创建/检索用户,并同时保存其关联的刷新令牌

OAuth2LoginAuthenticationFilter刷新令牌保存在 ClientRegistrationRepository 中:

OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(
    authenticationResult.getClientRegistration(),
    oauth2Authentication.getName(),
    authenticationResult.getAccessToken(),
    authenticationResult.getRefreshToken());

this.authorizedClientRepository.saveAuthorizedClient(authorizedClient, oauth2Authentication, request, response);
Run Code Online (Sandbox Code Playgroud)

默认实现将令牌保留在临时内存中,这不适合分布式应用程序或在重新启动后持续存在。

似乎有一个JdbcOauth2AuthorizedClientService最近添加了文档,以及一个 …

spring-security oauth-2.0 spring-security-oauth2 refresh-token

5
推荐指数
1
解决办法
2912
查看次数