我正在我的 asp.net Web API 中使用访问令牌。我正在使用Angular4作为客户端应用程序。登录后,我同时获得了访问令牌和刷新令牌。我有一个授权属性来检查我的 Get/Post 请求是否有效。 我在每个请求中发送带有访问令牌的刷新令牌。当我的访问令牌过期时,我的授权属性阻止我访问获取/发布功能。如何使用有效的刷新令牌授权我的 get/post 函数,并在验证 get/post 方法期间生成新的访问令牌。
访问令牌和刷新令牌是两个不同的东西。
访问令牌用于访问资源。您可以在每次请求时向资源发送访问令牌。
刷新令牌用于获取新的访问令牌,而无需发送凭据。刷新令牌将发送到授权终结点。但仅在访问令牌过期(返回未经授权的响应)之后。
确保刷新令牌不会在访问令牌过期之前过期。因为否则你必须再次发送凭据。
还要注意,refesh令牌应该保密,因为它可以用来检索令牌,而不必发送凭证。总是通过安全线路发送。
-更新-
刷新令牌的服务器端
我假设您有一个OAuthAuthorizationServerProvider来处理登录。类似于:
internal class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
为了选择加入,您可以重写GrantRefreshToken以接受刷新令牌:
public override async Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
{
// chance to change authentication ticket for refresh token requests
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
var appUser = await userManager.FindByNameAsync(context.Ticket.Identity.Name);
var oAuthIdentity = await appUser.GenerateUserIdentityAsync(userManager);
var newTicket = new AuthenticationTicket(oAuthIdentity, context.Ticket.Properties);
context.Validated(newTicket);
}
添加提供程序以将刷新令牌添加到票证:
internal class ApplicationOAuthRefreshTokenProvider : AuthenticationTokenProvider
{
public override void Create(AuthenticationTokenCreateContext context)
{
var form = context.Request.ReadFormAsync().Result;
var grantType = form.GetValues("grant_type");
// If I remember correctly we arrive here for all implemented grant types.
// But we don't want to add a refresh token to the refresh token itself.
if (grantType[0] != "refresh_token")
{
// 35 days.
int expire = 35 * 24 * 60 * 60;
context.Ticket.Properties.ExpiresUtc = new DateTimeOffset(DateTime.Now.AddSeconds(expire));
context.SetToken(context.SerializeTicket());
}
base.Create(context);
}
public override void Receive(AuthenticationTokenReceiveContext context)
{
context.DeserializeTicket(context.Token);
base.Receive(context);
}
}
别忘了在创业公司注册:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
// Other statements ...
// Configure the application for OAuth based flow
var oAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider("self"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
#if LIVE
AllowInsecureHttp = false,
#else
AllowInsecureHttp = true,
#endif
RefreshTokenProvider = new ApplicationOAuthRefreshTokenProvider()
};
app.UseOAuthBearerTokens(oAuthOptions);
}
我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可
我执行本问题中描述的步骤: Laravel的5.3护照和api路由 从api的路径来看,一切都很好,我可以注册新用户,读取他们的数据等等。 然后在AuthServiceProvider上添加此命令 护照::代币ExpireIn(碳::现在()- 我以url{{url}}/oauth/token登录邮递员 正文:application/x-www-form-urlencoded { 授权类型:{pa
我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account
我在我的Google-drive API中有刷新令牌和访问令牌。但是我不想每次用户使用我的API时都请求一个新的访问令牌,因为我存储了我的刷新令牌。如何从刷新令牌中获取新访问令牌
我在谷歌日历API工作。 问题是当使用刷新令牌时,我得到的是“请求失败:未授权(401)”(刷新令牌是因为用户不应该每次都需要登录) 对于在用户首次授权应用程序后检索的正常访问令牌(未过期),它可以正常工作。 下面是运行时url,它只在不使用刷新的访问令牌之前工作。
我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam