[英]Check user if authenticate using social media - IdentityServer4
我的Identity Server 4可以使用ASP.NET身份和社交媒體(Facebook,Google)進行身份驗證
在網址下方生成令牌
所以它會回應
{
"access_token": "{Bearer Token}",
"expires_in": 3600,
"token_type": "Bearer"
}
有可能添加新的屬性調用authenticate_type
嗎? 所以我可以通過使用或不使用社交媒體來了解該用戶的訪問權限。
例:
如果用戶通過使用Facebook進行身份驗證
{
"access_token": "{Bearer Token}",
"expires_in": 3600,
"token_type": "Bearer",
"authenticate_type": "Facebook"
}
如果用戶通過使用Google進行身份驗證
{
"access_token": "{Bearer Token}",
"expires_in": 3600,
"token_type": "Bearer",
"authenticate_type": "Google"
}
反之亦然。 知道怎么做嗎?
在id_token中應該有一個稱為IDP的聲明,它代表使用的提供者。
我假設您已經知道如何獲取登錄提供程序信息。 如果沒有,你可以從
IdentityProvider = string.Join(", ",
(await _userManager.GetLoginsAsync(user)).Select(l => l.LoginProvider)),
最好的方式是保存此附加信息在Claims中。 您可以通過添加上述代碼來修改您的身份資料服務
public class IdentityProfileService : IProfileService
{
private readonly IUserClaimsPrincipalFactory<ApplicationUser> _claimsFactory;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _db;
public IdentityProfileService(IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory, UserManager<ApplicationUser> userManager,
ApplicationDbContext dbContext)
{
_claimsFactory = claimsFactory;
_userManager = userManager;
_db = dbContext;
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
if (user == null)
{
throw new ArgumentException("");
}
var principal = await _claimsFactory.CreateAsync(user);
var claims = principal.Claims.ToList();
var login = await _userManager.GetLoginsAsync(user);
login.Select(l => l.LoginProvider).ToList().ForEach(x => claims.Add(new Claim("authenticate_type", x)));
context.IssuedClaims = claims;
}
public async Task IsActiveAsync(IsActiveContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
context.IsActive = user != null;
}
}
不要忘記將其附加到您的身份服務器
services.AddIdentityServer().AddProfileService<IdentityProfileService>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.