gpt4 book ai didi

asp.net - 使用 asp.net Identity 的 WebAPI2 中的多个 token 生命周期

转载 作者:行者123 更新时间:2023-12-02 02:10:25 26 4
gpt4 key购买 nike

我在 WebAPI 应用程序中使用带有 OWIN 中间件和 OAuth 的 asp.net 身份提供程序。使用模板和

https://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples

我的 WebAPI 端点上有有效的 OAuth。但是,我不知道如何扩展此架构以为不同的请求提供不同的 token 生命周期。

例如,我的 REST API 将由网络应用程序和移动应用程序使用。我希望移动应用程序的 token 生命周期比 Web 应用程序长得多。

在我的 Startup.Auth.cs 文件中,我看到以下 OAuth 配置 -

        // Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider<ApplicationUserManager, DirectoryUser, Guid>(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
});

有没有办法覆盖每个 token 请求的此行为?例如我可以暴露一个“/Token” -> 14 天,“/DeviceToken” -> 60 天。这可能吗?

最佳答案

通过将示例中的以下内容插入到我的 OAuth 提供程序 (ApplicationOAuthProvider.cs) 中,我能够修复此问题 -

   public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.Get<TUserManager>();

TUser user = await userManager.FindAsync(context.UserName, context.Password);


if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}


//if user, expire 60. If Admin, 14 days
if (userManager.IsInRole(user.Id, "Users"))
{
context.Options.AccessTokenExpireTimeSpan = TimeSpan.FromDays(60);
}
else {
context.Options.AccessTokenExpireTimeSpan = TimeSpan.FromDays(14);
}

ClaimsIdentity oAuthIdentity = await userManager.CreateIdentityAsync(user,
context.Options.AuthenticationType);
ClaimsIdentity cookiesIdentity = await userManager.CreateIdentityAsync(user,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = CreateProperties(user.UserName);


AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);

}

关于asp.net - 使用 asp.net Identity 的 WebAPI2 中的多个 token 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com