如何在用户注册期间生成 OWIN 不记名令牌

How to generate an OWIN bearer token during registration of a user

我已经使用 OWIN 和不记名令牌实现了身份验证,当用户尝试登录时它工作正常。所以我转到特殊的 \Token url 并提供 username/password 并获得此令牌作为响应。 但我也有注册用户功能,理想情况下我想在注册用户后立即获得此令牌。我可以在 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 object 的 AccessTokenFormat 上的 Protect 函数手动生成令牌,前提是您已在启动时将其设为静态 class,否则它将为空。

AuthenticationTicket ticket = new AuthenticationTicket(claimsIdentity, new AuthenticationProperties());
string token = Startup.OAuthServerOptions.AccessTokenFormat.Protect(ticket);

放置令牌生成逻辑的地方似乎很奇怪。

无论如何您都可以随心所欲地使用令牌,可能会将其附加到您的传出 header 或回复 object。