我目前正在与访问令牌的生存期作斗争。我有dotnet核心Web应用程序和dotnet核心Web API。
web应用程序受OpenIDConnect授权的保护。一旦您尝试连接到web应用程序,您将被重定向到Microsoft登录表单,成功登录后,访问令牌将被提供并与刷新令牌一起存储到cookie中。
因此,访问令牌在授权头中传递给我的WebAPI请求。当access_token生存期到期时,我的WebAPI开始返回未经授权的401。
我读了很多关于使用刷新令牌撤消访问令牌的文章,但我没有找到任何实现示例,所以我转向你们。
services.AddDataProtection();
services.AddAuthorization();
services.AddWebEncoders();
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.ClientId = Configuration["AzureAd:ClientId"];
options.Authority = $"{Configuration["AzureAd:AadInstance"]}{Configuration["AzureAd:Tenant"]}/v2.0";
options.ClientSecret = Configuration["AzureAd:ClientSecret"];
options.ResponseType = "code";
options.SaveTokens = true;
options.UseTokenLifetime = true;
options.Scope.Add(Configuration["AzureAd:Scope"]);
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = Configuration["AzureAd:Tenant"] != "common",
RoleClaimType = JwtClaimTypes.Role
};
options.Events = new OpenIdConnectEvents
{
OnRemoteFailure = context =>
{
context.HandleResponse();
context.Response.Redirect("/error");
return Task.CompletedTask;
}
};
});
services.AddHttpContextAccessor();
services.AddAuthentication("Bearer")
.AddJwtBearer(
"Bearer",
options =>
{
options.Authority = $"{Configuration["AzureAd:AadInstance"]}{Configuration["AzureAd:Tenant"]}/v2.0";
options.Audience = Configuration["AzureAd:Audience"];
options.TokenValidationParameters.ValidateIssuer = false;
});
最后,这是我的ApiService的构造函数,在这里我将访问令牌添加到头部。
protected ApiService(HttpClient httpClient, string apiUri, IHttpContextAccessor httpContextAccessor, ILogger<ApiService> logger)
{
this.httpClient = httpClient;
this.apiUri = apiUri;
this.logger = logger;
context = httpContextAccessor.HttpContext;
this.httpClient.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer", context.GetTokenAsync("access_token").Result);
}
如果你需要更多的信息,告诉我,我会提供的。谢谢!
正如我现在所指出的,您拥有基本的ASP.NET核心Web应用程序(MVC,或Razor),并且希望使用Azure Ad来保护它。
如果我的理解是正确的,您应该利用Microsoft.Identity.web库:https://github.com/azuread/microsoft-identity-web
它目前仍在预览,但我可以确认,它的工作稳定。以下是如何将其与ASP.NET核心web应用程序集成的详细说明:https://github.com/azuread/microsoft-identity-web/wiki/web-apps
我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam
我面临一个问题,以刷新谷歌访问令牌在服务器端。 我从谷歌认证服务器得到的响应只是403状态代码。信息是这样的 仅仅为了刷新访问令牌,在我的服务器上使用SSL是强制性的吗?它已经在我的本地服务器上测试过,没有附加任何SSL到它。
我需要在Spring Boot应用程序的服务层中获得访问令牌(grant_type=client_credentials),以便与其他微服务对话(服务到服务的交互)。这一层没有spring http会话或auth,我只有client_id、client_secret和令牌URL。这些属性在Application.properties中设置为: 这在Spring Security OAuth中似乎很
目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无
我有一个。NET应用程序,正在使用谷歌驱动器访问用户的文件。我能够获得授权代码,并且能够通过AccessToken和RefreshToken交换授权代码。问题是我无法刷新访问令牌,它在一小时后过期。 请指教。谢了。 请注意,使用此代码,我能够获得访问令牌。只是我希望这段代码在Google API中。