我们的前端正在登录用户并检索令牌。
我们的中间层是一个REST-API应用程序,它将使用令牌。 只需用
解码令牌即可 JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
JwtSecurityToken jwt = (JwtSecurityToken)tokenHandler.ReadToken(ssToken);
我们没有获得登录用户的正确objectidentifier。 我们也没有像姓名,电子邮件地址这样的声明,所以我认为它是我们得到的access_token。
如果只有access_token?
,我们如何检索正确的id_token?请注意,我们正在使用带有c#的第三方应用程序,因此我们不是一个WEB-API,只是一个简单的类库
答案 0 :(得分:1)
请尝试以下内容:
System.IdentityModel.Tokens.JwtSecurityToken token = new System.IdentityModel.Tokens.JwtSecurityToken(id_token);
var claims = token.Claims;
var userId = claims.FirstOrDefault(c => c.Type == "oid").Value;
我刚刚在我的项目中尝试过,并且能够在声明中获得用户ID。在这里,我的登录URL看起来像:
https://login.windows.net/[Azure AD Tenant Id]/oauth2/authorize?response_mode=form_post&response_type=id_token&scope=openid+profile&client_id=[Client ID]&resource=https%3A%2F%2Fgraph.windows.net&redirect_uri=[Redirect Uri]&state=[User State]&nonce=[Some Random nonce]