Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在用户注册期间生成OWIN承载令牌_C#_.net_Asp.net Mvc_Owin_Bearer Token - Fatal编程技术网

C# 如何在用户注册期间生成OWIN承载令牌

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

我已经用OWIN和承载令牌实现了身份验证,当用户尝试登录时,它可以正常工作。因此,我转到special\Token url并提供用户名/密码,然后得到这个令牌作为响应。 但我也有一个注册用户功能,理想情况下,我希望在注册用户后立即获得这个令牌。我可以在web服务器中内部转到\Token,或者在客户端注册后执行\Token,但我希望有一个解决方案,可以执行类似的操作

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”这样的完整令牌数据?