我有一个应用程序,它使用 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) 在使用 Firebase 的 REST API 测试我们的一个产品(一个 Web 应用程序)的安全性时,当我们意识到在 Firebase 实现的 V3 中刷新令牌永不过期,允许任何刷新令牌永远创建新令牌时,我们感到惊讶.
虽然本地存储今天似乎是一个相当安全的解决方案,但我们担心它明天可能会失败,即使是很短的时间,而且我们无法阻止某人使用任何这些刷新令牌。
两因素身份验证将有助于缓解该问题,但第一步将受到损害。
有没有办法使用 Firebase 将令牌或类似行为列入黑名单,而无需我们自己处理所有令牌交换,例如铸造?我们在浏览文档时找不到这样的功能。
任何建议表示赞赏。
你好,其他程序,我被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) 我正在使用laravel/passport password_grant进行身份验证。整个生成access_token和refresh_token过程工作正常。现在我正在尝试使用 Laravel 护照令牌事件来撤销旧令牌。
我参考了这篇文章的过程 - https://laracasts.com/discuss/channels/laravel/laravel-passport-revoke-and-prune-event-listener-is-not-doing-anything
这有效......但是当access token使用先前提供的刷新时refresh token,access token正在创建一个新的并创建一个新的refresh token存在。最终,在撤销 old 时access token, old, not expiredrefresh token也被撤销。
但我认为,refresh token只有在它到期时才必须撤销。
而且当我EventListeners从App\Providers\EventServiceProvider $listen array 中删除时,撤销机制仍然有效。
这就像拔掉插头灯泡仍然亮着一样。
如何解决这个问题?还是我在某个地方的概念有误?
authentication access-token laravel refresh-token laravel-passport
我有以下软件片段/部分:
根据 RFC 6749,类型 1 客户端是机密的,类型 2 客户端是公开的。
已决定在第一个版本中对两种类型的客户端使用资源所有者密码凭据授权。对于类型 1 客户端来说,这似乎没问题,因为它们能够维护其凭据的机密性,并且无法使用授权代码授予(没有交互式用户)。
授权详情
公共客户没有秘密。这意味着如果任何人获得刷新令牌和客户端 ID(最后一个不安全),那么他可以使用它来获取新的访问令牌并使用 REST API。
我正在创建一个 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
如何使用适用于 iOS 的开发工具包 - Amazon Cognito 检查刷新令牌是否过期?
在 Amazon Cognito 上设置了刷新令牌到期日。
我在刷新令牌到期日期后尝试了它们。
user!.isSignedIn
user!.getSession().result
Run Code Online (Sandbox Code Playgroud)
然而,它们似乎不适用于检查刷新令牌是否过期。
如果您能给我任何建议或提示,请告诉我。我真的很感激。先感谢您。
按照此过程操作: 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。 ” :

我尝试在 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 方法):

以下是在 Azure 门户中注册的应用程序配置的重定向 URL:

我期望来自端点的有效响应。如何配置redirect_uri才有效?
编辑1
我修复了redirect_uri参数。
dotnet-httpclient azure-active-directory asp.net-core refresh-token microsoft-graph-api
我有一个使用 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) 我的 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
refresh-token ×10
oauth-2.0 ×4
access-token ×2
asp.net-core ×2
android ×1
c# ×1
firebase ×1
ios ×1
jboss ×1
keycloak ×1
laravel ×1
logout ×1
openiddict ×1
redhat ×1
rest ×1
retrofit2 ×1
rx-java ×1
session ×1
swift ×1
token ×1