从 Azure AD body 请求中检索 id_token 的方法
a method to retrieve id_token from Azure AD body request
我正在关注这个 WebApp-WebAPI example。在 B2C 用户获得授权并在 body 中收到 id_token 后,是否有一种方法可以检索 id_token?我正在使用函数应用程序 V3。
我在 azure Function 应用程序中收到了对 replyURL 的授权响应,但是 id_token 以 body 的形式与代码和状态数据混合在一起,我似乎无法将其分解或反序列化为 json:
public class Function1
{
internal class AuthToken
{
[JsonProperty("id_token")]
public string id_Token { get; set; }
[JsonProperty("state")]
public string StateToken { get; set; }
[JsonProperty("code")]
public string CodeToken { get; set; }
}
private readonly HttpClient httpClient = new HttpClient();
[FunctionName("ReceiverAuth")]
public static async Task<HttpStatusCode> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
//this works and shows id_token, state, code as text (also without the Encoding.UTF8 parameter)
var requestBody = await new StreamReader(req.Body, Encoding.UTF8).ReadToEndAsync();
//trying to separate the id_token data into json throws http500
AuthToken authTok = JsonConvert.DeserializeObject<AuthToken>(requestBody);
var idToken = authTok.id_Token;
}
也尝试过但没有改变结果:
var decodedRequestBody = System.Net.WebUtility.HtmlDecode(requestBody);
在我的菜鸟眼中,Fiddler 的 body 感觉数据被破坏了,但我无法将请求中的 id_token 分开。已收到。显示请求 header 以及网络表单和响应。
发送给您的数据是 form data,而不是 JSON。
你需要使用这样的东西:
var idToken = req.Form["id_token"];
或者您可以尝试 FromForm
而不是 HttpRequest req
:
[FromForm] AuthToken authTok
如果这些都不起作用,请检查这些:How to parse form data using Azure Functions
我正在关注这个 WebApp-WebAPI example。在 B2C 用户获得授权并在 body 中收到 id_token 后,是否有一种方法可以检索 id_token?我正在使用函数应用程序 V3。
我在 azure Function 应用程序中收到了对 replyURL 的授权响应,但是 id_token 以 body 的形式与代码和状态数据混合在一起,我似乎无法将其分解或反序列化为 json:
public class Function1
{
internal class AuthToken
{
[JsonProperty("id_token")]
public string id_Token { get; set; }
[JsonProperty("state")]
public string StateToken { get; set; }
[JsonProperty("code")]
public string CodeToken { get; set; }
}
private readonly HttpClient httpClient = new HttpClient();
[FunctionName("ReceiverAuth")]
public static async Task<HttpStatusCode> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
//this works and shows id_token, state, code as text (also without the Encoding.UTF8 parameter)
var requestBody = await new StreamReader(req.Body, Encoding.UTF8).ReadToEndAsync();
//trying to separate the id_token data into json throws http500
AuthToken authTok = JsonConvert.DeserializeObject<AuthToken>(requestBody);
var idToken = authTok.id_Token;
}
也尝试过但没有改变结果:
var decodedRequestBody = System.Net.WebUtility.HtmlDecode(requestBody);
在我的菜鸟眼中,Fiddler 的 body 感觉数据被破坏了,但我无法将请求中的 id_token 分开。已收到。显示请求 header 以及网络表单和响应。
发送给您的数据是 form data,而不是 JSON。
你需要使用这样的东西:
var idToken = req.Form["id_token"];
或者您可以尝试 FromForm
而不是 HttpRequest req
:
[FromForm] AuthToken authTok
如果这些都不起作用,请检查这些:How to parse form data using Azure Functions