public Task AddLoginAsync(IdentityUser user, UserLoginInfo login, CancellationToken cancellationToken) => Task.Run(() => { if (Base.Host.IsDevelopment) { Base.Current.Log.KeyValuePair(MethodBase.GetCurrentMethod().Name, new { user, login }.ToJson(), Message.EContentType.Info); } var key = login.StampValue(); var claimsIdentity = (ClaimsIdentity)((ExternalLoginInfo)login).Principal.Identity; var claimDict = new Dictionary <string, string>(); foreach (var claim in claimsIdentity.Claims.ToList().Where(claim => !claimDict.ContainsKey(claim.Type))) { claimDict[claim.Type] = claim.Value; } var entry = new Model.Identity { Id = key, IdentityUser = user, Name = claimsIdentity.Name, Claims = claimDict, IsAuthenticated = claimsIdentity.IsAuthenticated, Label = claimsIdentity.Label, LoginProvider = login.LoginProvider, ProviderKey = login.ProviderKey }; entry.Save(); }, cancellationToken);