我们的前端正在登录用户并检索 token 。
我们的中间层是一个 REST-API 应用程序,它将消耗 token 。 通过简单地使用
解码 token JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
JwtSecurityToken jwt = (JwtSecurityToken)tokenHandler.ReadToken(ssToken);
我们没有获得登录用户的正确对象标识符。 我们也没有姓名、电子邮件地址等声明,因此我认为这是我们获得的 access_token。
只有access_token时如何获取正确的id_token?
请注意,我们使用的是带有 C# 的第 3 方应用程序,因此我们不是 WEB-API,只是一个简单的类库
最佳答案
请尝试以下操作:
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]
关于azure - 如何根据access_token获取id_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29364068/