これは私が最終的にこの作業を行うために使用されるコードです:
Authentication.SignOut(authTypeNames.ToArray());
var oAuthIdentity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, dbUser.Username));
oAuthIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, dbUser.User_ID.ToString()));
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Role, dbUser.UserRole));
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Role, dbUser.User_ID.ToString()));
//ads only certain docadmin ids to the role.
if (dbUser.UserRole == Medapp.BusinessFacade.Constants.ROLE_SECRETARY)
{
// /doc/home
//add guids of all the doctors as roles
var roles = db.OfficeAdministrators.Where(p => p.Admin_ID == dbUser.User_ID);
foreach (var role in roles)
{
oAuthIdentity.AddClaim(new Claim(ClaimTypes.Role, role.Doctor_ID.ToString()));
}
}
List<Claim> jroles = oAuthIdentity.Claims.Where(c => c.Type == ClaimTypes.Role).ToList();
AuthenticationProperties properties = CreateProperties(dbUser.User_ID.ToString(), dbUser.UserRole, dbUser.Username, Newtonsoft.Json.JsonConvert.SerializeObject(jroles.Select(x => x.Value))); //user.UserName);
properties.IsPersistent = true;
properties.ExpiresUtc = new System.DateTimeOffset(new DateTime().AddDays(365), new System.TimeSpan());
var ticket = new AuthenticationTicket(oAuthIdentity, properties);
DateTime currentUtc = DateTime.UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromDays(365));
string accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);
JObject token = new JObject(
new JProperty("username", dbUser.Username),
new JProperty("token", accessToken),
new JProperty("uid", dbUser.User_ID.ToString()),
new JProperty("type", dbUser.UserRole),
new JProperty("roles", Newtonsoft.Json.JsonConvert.SerializeObject(jroles.Select(x => x.Value))),
new JProperty("access_token", accessToken),
new JProperty("token_type", "bearer"),
new JProperty("expires_in", TimeSpan.FromDays(365).TotalSeconds.ToString()),
new JProperty("issued", currentUtc.ToString("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'")),
new JProperty("expires", currentUtc.Add(TimeSpan.FromDays(365)).ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"))
);
return Ok(token);