protected OAuthTokenResponse GenerateTokenResponse(string username, string deviceId) { // Construct an identity var claims = Context.Services.UserService.GetUserClaims(username); var identity = new ClaimsIdentity("OAuth"); identity.AddClaim(new Claim(ClaimTypes.Name, username)); identity.AddClaim(new Claim(OAuth.ClaimTypes.Realm, Context.Realm)); if (!deviceId.IsNullOrWhiteSpace()) { identity.AddClaim(new Claim(OAuth.ClaimTypes.DeviceId, deviceId)); } identity.AddClaims(claims); var response = new OAuthTokenResponse { access_token = Context.Services.TokenService.GenerateToken(identity, Context.Options.AccessTokenLifeTime), token_type = "bearer", expires_in = Context.Options.AccessTokenLifeTime * 60 }; // If we have a token store, create a refresh token if (Context.Services.RefreshTokenStore != null) { var refreshTokenId = Guid.NewGuid().ToString("n"); var refreshTokenLifeTime = Client?.RefreshTokenLifeTime ?? Context.Options.RefreshTokenLifeTime; var token = new OAuthRefreshToken { Key = refreshTokenId.GenerateHash(), Subject = username, UserType = Context.Services.UserService.UserType, Realm = Context.Realm, ClientId = Client != null ? Client.ClientId : OAuth.DefaultClientId, DeviceId = deviceId.IsNullOrWhiteSpace() ? null : deviceId, IssuedUtc = DateTime.UtcNow, ExpiresUtc = DateTime.UtcNow.AddMinutes(refreshTokenLifeTime), ProtectedTicket = response.SerializeToJson().Encrypt(Context.Options.SymmetricKey) }; Context.Services.RefreshTokenStore.AddRefreshToken(token); response.refresh_token = refreshTokenId; } return(response); }