我的身份服务器4可以使用ASP.NET身份和社交媒体(Facebook,Google)进行身份验证。
在url下面生成令牌。
http://localhost:5105/connect/token
所以它会做出反应
{
"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"
}反之亦然。知道怎么做吗?
发布于 2018-12-16 23:03:02
我假设您已经知道如何获取登录提供程序信息。如果不是,你可以从
IdentityProvider = string.Join(", ",
(await _userManager.GetLoginsAsync(user)).Select(l => l.LoginProvider)),最好的方法是在索赔中保存这些附加信息。您可以通过添加上述代码来修改身份配置文件服务。
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>();https://stackoverflow.com/questions/53773469
复制相似问题