Azure B2C:生成代码挑战



我的Azure应用程序是一个单页应用程序,当尝试通过邀请实现电子邮件注册时,我收到错误:

AADB2C99059:提供的请求必须提供一个code_challenge

我们的应用程序服务器是否生成此code_challenge,或者Azure B2C是否应该为我们执行此操作?此外,我们究竟应该如何生成code_challenge?

您需要通过代码生成code_challenge并将其传递给请求URL,在获取访问令牌时也使用code_verifier

参考-https://medium.com/the-new-control-plane/using-proof-key-for-code-exchange-pkce-in-azure-ad-b2c-9203fbc148fd

C#样品:

using IdentityModel;
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace PKCEConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var random = new Random();
int cvlength = random.Next(43, 128);
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
var codeVerifier = new string (Enumerable.Repeat(chars, cvlength).Select(s => s[random.Next(s.Length)]).ToArray());

string codeChallenge;
using (var sha256 = SHA256.Create())
{
var a = Encoding.UTF8.GetBytes(codeVerifier);
var challengeBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(codeVerifier));
codeChallenge = Base64Url.Encode(challengeBytes);

/* Alternatively instead of using Base64Url.Encode method, the code below can accomplish the same result:

var result = Convert.ToBase64String(challengeBytes)
.Replace('+', '-') // replace URL unsafe characters with safe ones
.Replace('/', '_') // replace URL unsafe characters with safe ones
.Replace("=", ""); // no padding
*/
}

Console.WriteLine("codeVerifier " + codeVerifier + "n");
Console.WriteLine("codeChallenge " + codeChallenge + "n");

Console.ReadLine();
}
}
}

您需要向应用程序发送身份验证请求,并让应用程序发出正确的身份验证请求。你不能只是按原样启动邀请链接,这只是一个测试它的例子

要将这样的链接集成到应用程序中,请参阅:

https://learn.microsoft.com/en-us/azure/active-directory-b2c/enable-authentication-spa-app-options#pass-id令牌提示

对于SPA应用程序,如果您使用MSAL.js库,请初始化MSAL对象中的extraQueryParameters配置键。并传入键值对:id_token_int:id_token-int_value。然后传递正确的B2C策略Id作为权限,然后启动msalObj.loginDirect((。

你的用户应该收到一个链接,比如myApp.com/redempe?id_token=id_token_int_value。

相关内容

  • 没有找到相关文章