C# 如何在用户注册期间生成OWIN承载令牌
我已经用OWIN和承载令牌实现了身份验证,当用户尝试登录时,它可以正常工作。因此,我转到special\Token url并提供用户名/密码,然后得到这个令牌作为响应。 但我也有一个注册用户功能,理想情况下,我希望在注册用户后立即获得这个令牌。我可以在web服务器中内部转到\Token,或者在客户端注册后执行\Token,但我希望有一个解决方案,可以执行类似的操作C# 如何在用户注册期间生成OWIN承载令牌,c#,.net,asp.net-mvc,owin,bearer-token,C#,.net,Asp.net Mvc,Owin,Bearer Token,我已经用OWIN和承载令牌实现了身份验证,当用户尝试登录时,它可以正常工作。因此,我转到special\Token url并提供用户名/密码,然后得到这个令牌作为响应。 但我也有一个注册用户功能,理想情况下,我希望在注册用户后立即获得这个令牌。我可以在web服务器中内部转到\Token,或者在客户端注册后执行\Token,但我希望有一个解决方案,可以执行类似的操作 public Token RegisterUser(RegisterUserRequest request) { // Re
public Token RegisterUser(RegisterUserRequest request)
{
// Registration here
return OAuthProvider.GenerateToken(username, password)
}
有可能做这样的事情吗?我在找和你一样的东西,但我什么也找不到,所以我只是在内部提出了请求。工作不多,但还是有点令人失望
public JToken GetLoginResponse(UserSignupDto dto)
{
var tokenPath = Request.RequestUri.GetLeftPart(UriPartial.Authority) + "/token";
var reqData = string.Format("grant_type=password&username={0}&password={1}&client_id={2}", dto.Email, dto.Password, dto.ClientId);
using(var client = new WebClient())
{
return JObject.Parse(client.UploadString(tokenPath, reqData));
}
}
我花了很长时间才弄明白,所以我想把它加在这里 您可以使用OAuthAuthorizationServerOptions对象的AccessTokenFormat上的Protect函数手动生成令牌,前提是您在启动类中将其设置为静态,否则它将为null
AuthenticationTicket ticket = new AuthenticationTicket(claimsIdentity, new AuthenticationProperties());
string token = Startup.OAuthServerOptions.AccessTokenFormat.Protect(ticket);
将令牌生成逻辑放在一个非常奇怪的地方
无论如何,您可以按照自己的意愿使用令牌,可能会将其附加到传出的标头或响应对象。我没有想到这个解决方案,但我会从浏览器中调用两次,第一次是注册(此时我有用户名和密码),成功后,我会调用令牌。这几乎是一样的,但是你在web服务器上做,我在js中做。但奇怪的是,没有好的解决方法。有人知道在代码中实际获取令牌的方法吗?似乎这真的会起作用,尽管您不会获取完整格式的令牌数据,而只是令牌本身。虽然您必须向启动添加静态属性才能使其工作,而且正如您所说的,放置Protect方法似乎是一个非常奇怪的地方。您是否找到了更好的方法来生成像“/token”这样的完整令牌数据?