gpt4 book ai didi

asp.net-web-api - 存储owin oauth承载 token

转载 作者:行者123 更新时间:2023-12-04 16:37:00 27 4
gpt4 key购买 nike

我正在使用默认的owin oauth服务器创建一个简单的身份验证服务器。提供正确的凭证后,将生成一个承载 token 并将其返回给客户端。我在Taiseer中使用了这个tutorial

我想在将 token 发送到客户端之前将 token 存储在数据库中。
也许我完全忽略了它,但是在发送 token 之前我可以在哪里获得 token 呢?据我所知, token 是在GrantResourceOwnerCredentials方法中验证票证后生成的。
我猜 token 存储在上下文中。我怎样才能把它弄出来?

Startup.cs

private void ConfigureAuthServer(IAppBuilder app) {
// Configure the application for OAuth based flow
var oAuthServerOptions = new OAuthAuthorizationServerOptions {
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth/token"),
Provider = new ApplicationOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14)
};

// Enable the application to use bearer tokens to authenticate users
app.UseOAuthAuthorizationServer(oAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

ApplicationOAuthProvider
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) {
//Dummy check here
if (context.UserName != context.Password) {
context.SetError("invalid_grant", "The user name or password is incorrect");
return Task.FromResult<object>(null);
}

var claims = new List<Claim> {
new Claim(ClaimTypes.NameIdentifier, context.UserName),
new Claim(ClaimTypes.Name, context.UserName)
};

var oAuthIdentity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);

AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
context.Validated(ticket);
return Task.FromResult<object>(null);
}

public override Task TokenEndpoint(OAuthTokenEndpointContext context) {
foreach (KeyValuePair<string, string> property in context.Properties.Dictionary) {
context.AdditionalResponseParameters.Add(property.Key, property.Value);
}

return Task.FromResult<object>(null);
}

注意:对于那些想知道为什么要存储 token 的人,这是我必须满足的要求。

最佳答案

要在将 token 发送给客户端之前获取 token ,您必须重写TokenEndpointResponse:

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
{
return base.TokenEndpointResponse(context);
}
context对象具有 AccessToken属性,它将包含 token 的字符串表示形式。

enter image description here
OAuthTokenEndpointResponseContext包含对象字典 IDictionary<string, object>中的 AdditionalResponseParameters,可让我们查找有关身份的所有声明。

如果我们想获取 token 的到期时间,我们将在字典中找到声明 .expires:
context.AdditionalResponseParameters[".expires"]

如果有人有兴趣玩客户端和服务器交互的简单集成,可以使用github repository

关于asp.net-web-api - 存储owin oauth承载 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174319/

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