4

我已经使用 OWIN 和不记名令牌实现了身份验证,并且当用户尝试登录时它工作正常。所以我转到特殊的 \Token url 并提供用户名/密码并获取此令牌作为响应。但我也有注册用户功能,理想情况下,我希望在注册用户后立即获得此令牌。我可以在Web服务器内部访问\Token,或者在客户端注册后执行\Token,但我希望有一个解决方案可以让我做类似的事情

public Token RegisterUser(RegisterUserRequest request)
{
    // Registration here
    return OAuthProvider.GenerateToken(username, password)
}

有可能做这样的事情吗?

4

2 回答 2

5

我花了很长时间才弄清楚,所以我想我会在这里添加它。

您可以使用 OAuthAuthorizationServerOptions 对象的 AccessTokenFormat 上的 Protect 函数手动生成令牌,假设您已在启动类中将其设为静态,否则它将为空。

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

放置令牌生成逻辑似乎是一个非常奇怪的地方。

无论如何,您可以随心所欲地使用令牌,可能会将其附加到您的传出标头或响应对象。

于 2015-07-12T10:14:41.217 回答
1

我正在寻找与您相同的东西,但我找不到任何东西,所以我只是在内部提出了请求。工作量不大,但还是有点失望。

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));
    }
}
于 2015-07-06T16:00:36.130 回答