Web API个人帐户注册用户



我正在开发一个ASP。. NET Web API使用ASP。NET身份(个人帐户)用于身份验证/授权。我可以通过调用/token URI成功登录。

所有我想要的是自动登录我的用户,当他注册到我的应用程序。我能够通过使用以下代码在注册方法中登录用户来完成一半的任务:

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager, OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);

是否有一种方法,我可以返回相同的OAuth样的响应,当我成功调用/token。例如:

{"access_token":"access-token","token_type":"bearer","expires_in":1209599,"userName":"username",".issued":"Sat, 22 Mar 2014 08:12:14 GMT",".expires":"Sat, 05 Apr 2014 08:12:14 GMT"}

实际上我面临着同样的问题,我处理它在这样一个丑陋的方式——内部注册方法,我做了另一个web请求访问"/token",就在创建新用户之后,并通过最新的用户名和密码。

private string GetTokenForNewUser(string username, string password)
    {
        using (var client = new HttpClient())
        {
            var host = Request.RequestUri.Scheme + "://" + Request.RequestUri.Host + ":" + Request.RequestUri.Port;
            client.BaseAddress = new Uri(host);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            Dictionary<string, string> credential = new Dictionary<string, string>();
            credential.Add("grant_type", "password");
            credential.Add("username", username);
            credential.Add("password", password);
            HttpResponseMessage response = client.PostAsync(host + "token", new FormUrlEncodedContent(credential)).Result;
            if (response.IsSuccessStatusCode)
            {
                return response.Content.ReadAsStringAsync().Result;
            }
        }
        //if we go this far, something error happens
        return string.Empty;
    }

我不认为这是一个好方法,但它只是工作。

您可以为令牌添加有效负载(这也取决于您正在使用的令牌)。然后,您还可以在请求期间从令牌检索有效负载值。

var token = new JwtSecurityToken(_config["Jwt:Issuer"], _config["Jwt:Issuer"], signingCredentials: credentials, expires: DateTime.Now.AddDays(2));
token.Payload["UserId"] = user.Id;

相关内容

  • 没有找到相关文章

最新更新