Asp.net core Apple社交登录.Net核心Web API-如何访问用户&x27;s电子邮件

Asp.net core Apple社交登录.Net核心Web API-如何访问用户&x27;s电子邮件,asp.net-core,oauth-2.0,asp.net-identity,apple-sign-in,Asp.net Core,Oauth 2.0,Asp.net Identity,Apple Sign In,我们试图在一个有.Net核心Web API和Reactjs SPA的项目中实现与苹果的社交登录。由于响应类型和响应模式的限制,从前端,我们只能在成功登录时从apple获得授权码 我们可以使用以下逻辑在后端验证此授权代码。同样在响应中,它包含id_令牌,我们可以在其中访问一些其他信息,但不能访问电子邮件。我们计划做的是,如果授权代码有效,并且存在具有相同电子邮件的用户(电子邮件是用户名),它将根据使用asp.net core Identity framework实现的内置身份验证/授权引擎对用户进

我们试图在一个有.Net核心Web API和Reactjs SPA的项目中实现与苹果的社交登录。由于响应类型和响应模式的限制,从前端,我们只能在成功登录时从apple获得授权码

我们可以使用以下逻辑在后端验证此授权代码。同样在响应中,它包含id_令牌,我们可以在其中访问一些其他信息,但不能访问电子邮件。我们计划做的是,如果授权代码有效,并且存在具有相同电子邮件的用户(电子邮件是用户名),它将根据使用asp.net core Identity framework实现的内置身份验证/授权引擎对用户进行身份验证并返回Auth JWT令牌

    var clientSecret = CreateJwtToken();

    var data = new Dictionary<string, string>
    {
         { "client_id" , "xxx.xxxxx.com" },
         { "code" , authCode },
         { "scope" , "email" },
         { "grant_type" , "authorization_code" },  
         { "redirect_uri", "http://6c52b7b4xx.ngrok.io/login/apple" },  
         { "client_secret", clientSecret }
    };
    
   var formdata = new FormUrlEncodedContent(data);
    
   var res = await client.PostAsync("https://appleid.apple.com/auth/token", formdata);
    
   var authToken = await res.Content.ReadAsStringAsync();
    
   var responseJSON = JObject.Parse(authToken);
   var id_token = responseJSON.GetValue("id_token").ToString();
var clientSecret=CreateJwtToken();
var数据=新字典
{
{“client_id”,“xxx.xxxxx.com”},
{“代码”,authCode},
{“范围”,“电子邮件”},
{“授权类型”、“授权代码”},
{“重定向uri”http://6c52b7b4xx.ngrok.io/login/apple" },  
{“客户机密”,客户机密}
};
var formdata=新FormUrlEncodedContent(数据);
var res=wait client.PostAsync(“https://appleid.apple.com/auth/token“,formdata);
var authToken=await res.Content.ReadAsStringAsync();
var responseJSON=JObject.Parse(authToken);
var id_token=responseJSON.GetValue(“id_token”).ToString();
我不确定我错过了什么。我们有没有办法在后端访问用户的电子邮件?如果没有,有没有更好的方法来实现苹果的认证

谢谢