Azure AD 和 Azure AD B2C 令牌之间的区别

2024-04-29

这些天我一直在研究 Azure AD 授权代码流,突然开始将所有内容转移到 Azure AD B2C,我发现 Azure AD 和 Azure AD B2C 之间有很多差异。有人可以回答我下面的问题吗?

  1. 在Azure AD中,当我们注册本机应用程序时,它允许http或https作为重定向url。 Azure AD B2C 不支持此功能(因为两者都遵循 OAUTH 规范,因此两者的行为应该类似)

  2. Azure AD JWT 访问令牌具有x5cB2C 没有此条目的条目。任何特殊原因。我尝试从 Azure AD 复制公钥,并尝试将相同的签名密钥上传到 B2C,但这不起作用。不确定我错过了什么,但我的问题是为什么这些访问令牌的签名不同。


对于第一个问题,我建议您提出反馈from https://feedback.azure.com/forums/169401-azure-active-directory/category/160596-b2c如果您需要此功能,请点击此处。

对于第二个问题,验证来自 Azure AD B2C 和普通 Azure AD 的令牌是相同的。我们可以使用指数(e)和模(n). 但密钥端点不同,我们需要使用如下链接来检索 Azure AD B2C 的密钥:

https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys?p={signInPolicy}

以下是验证Azure AD B2C颁发的令牌的代码,供您参考:

static void Main(string[] args)
{          
    var idtoken = "";

    var exponent = "AQAB";
    var modulus = "";
    var result=  VerifyTokenDetails(idtoken, exponent, modulus);
}
private static bool VerifyTokenDetails(string idToken, string exponent, string modulus)
{
    try
    {              
        var parts = idToken.Split('.');
        var header = parts[0];
        var payload = parts[1];
        string signedSignature = parts[2];
        //Extract user info from payload   
        string userInfo = Encoding.UTF8.GetString(Base64UrlDecode(payload));
        //Which will be Verified
        string originalMessage = string.Concat(header, ".", payload);
        byte[] keyBytes = Base64UrlDecode(modulus);
        string keyBase = Convert.ToBase64String(keyBytes);
        string key = @"<RSAKeyValue> <Modulus>" + keyBase + "</Modulus> <Exponent>" + exponent + "</Exponent> </RSAKeyValue>";
        bool result = VerifyData(originalMessage, signedSignature, key);
        if (result)
            return true;
        else
            return false;
    }
    catch (Exception ex) { }
    return false;
}

/// <summary>  
/// Verifies encrypted signed message with public key encrypted original message.  
/// </summary>  
/// <param name="originalMessage">Original message as string. (Encrypted form)</param>  
/// <param name="signedMessage">Signed message as string. (Encrypted form)</param>  
/// <param name="publicKey">Public key as XML string.</param>  
/// <returns>Boolean True if successful otherwise return false.</returns>  
private static bool VerifyData(string originalMessage, string signedMessage, string publicKey)
{
    bool success = false;
    using (var rsa = new RSACryptoServiceProvider())
    {
        var encoder = new UTF8Encoding();
        byte[] bytesToVerify = encoder.GetBytes(originalMessage);
        byte[] signedBytes = Base64UrlDecode(signedMessage);
        try
        {

            rsa.FromXmlString(publicKey);
            SHA256Managed Hash = new SHA256Managed();
            byte[] hashedData = Hash.ComputeHash(signedBytes);
            // Summary:
            //     Verifies that a digital signature is valid by determining the hash value in the
            //     signature using the provided public key and comparing it to the hash value of
            //     the provided data.
            success = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA256"), signedBytes);
        }
        catch (CryptographicException e)
        {
            success = false;
        }
        finally
        {
            rsa.PersistKeyInCsp = false;
        }
    }
    return success;
}

private static byte[] Base64UrlDecode(string input)
{
    var output = input;
    output = output.Replace('-', '+'); // 62nd char of encoding  
    output = output.Replace('_', '/'); // 63rd char of encoding  
    switch (output.Length % 4) // Pad with trailing '='s  
    {
        case 0: break; // No pad chars in this case  
        case 2: output += "=="; break; // Two pad chars  
        case 3: output += "="; break; // One pad char  
        default: throw new System.Exception("Illegal base64url string!");
    }
    var converted = Convert.FromBase64String(output); // Standard base64 decoder  
    return converted;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure AD 和 Azure AD B2C 令牌之间的区别 的相关文章

随机推荐

  • 关闭所有 React Native 输入上的 autoCapitalize (iOS)

    我的大部分输入仅在 iOS 上自动大写 我知道有自动大写 https facebook github io react native docs textinput html autocapitalize我可以在每个输入上将其设置为 fals
  • 如何使用 PHP 读写编辑 pptx/docx/xlsx 文件?

    是否有库扩展可用于使用 PHP 有效处理 pptx docx xlsx 文件 到目前为止 我对 PPTX 文件更感兴趣 据我所知 这些文件格式 docx xlsx pptx 只是 zip 文件 它们属于 Office Open XML OO
  • Java-将文件复制到新文件或现有文件

    我想写一个函数副本 文件f1 文件f2 f1 始终是一个文件 f2 是文件或目录 如果 f2 是一个目录 我想将 f1 复制到该目录 文件名应保持不变 如果f2是一个文件 我想将f1的内容复制到文件f2的末尾 例如 如果 F2 具有内容 2
  • iOS中保存到照片库后获取UIImage数据

    将我的应用程序创建的图像保存到 iPhone 库并尝试将其恢复后 我遇到了问题 图像数据不同 创建图像 1 Code 我在不使用 alpha 的情况下创建图像 事实上 如果我使用 alpha 我会得到相同的结果 UIImage create
  • 既然 Angular 是双向数据绑定,为什么我应该在 Angular 中使用 Redux?

    据我了解 Redux 主要是为了在 javascript 应用程序中启用双向数据绑定 这对于非双向数据绑定的框架非常有用 例如 React 但为什么要在 Angular 中使用它 因为它本身就是双向数据绑定的 为了说明我的问题 我在本机 A
  • Angular:在 agGrid 中的动态列上设置默认排序的最佳方法

    我正在开发 agGrid 我们没有明确定义列 我一生都无法弄清楚如何在我的一列上设置默认排序 在初始化时我们这样做 public ngOnInit void this gridOptions defaultColDef this selec
  • Chimpjs 和 Meteor:不使用 Velocity 的测试中的方法调用

    此应用程序显示了使用 Cucumber 测试 Meteor 的示例 https github com mhurwi cucumber meteor tutorial https github com mhurwi cucumber mete
  • 在java中迭代集合时从集合中删除项目

    我希望能够在迭代集合时从集合中删除多个元素 最初 我希望迭代器足够聪明 能够让下面的简单解决方案发挥作用 Set
  • NvCplGetThermalSettings 返回 false

    问题 您好 我正在尝试使用 Delphi 获取 nividia gtx 980 的 GPU 温度 我看过C 问题 他的解决方案是不使用nvcpl dll 我认为这不是正确的解决方案 因为 nivida 有完整的文档说明如何处理 API 见下
  • Vue - API 调用属于 Vuex 吗?

    我正在努力寻找在 vue 模块中理想的 API 调用位置的答案 我不是在构建 SPA 例如 我的 auth 块有几个用于登录 密码重置 帐户验证等的组件 每个块都使用 axios 进行 API 调用 Axios 已经提供了异步的 Promi
  • 使 Primefaces 的数据表行在行版本上无效

    我正在使用 JSF 2 1 Primefaces 5 1 开发一个网络应用程序 我有一个带有行版本的数据表 每行有 2inputText 2 selectOneMenu and 1 selectBooleanCheckbox 我想在单击复选
  • 在合并的 csv 文件中添加附加列

    我的代码合并 csv 文件并使用 pandas 删除重复项 是否可以向单个合并文件添加带有值的附加标头 应该调用附加标头Host Alias并且应该对应于Host Name E g Host Name is dpc01n1以及相应的Host
  • HTML 元字符集应该是小写还是大写?

    通常情况下UTF应该大写 因为它是缩写 然而 HTML 中的属性通常是小写的 那么 应该是 or 我知道两者都有效 谢谢 字符集的值不区分大小写 来自spec whatwg org charset 属性指定文档使用的字符编码 这是一个字符编
  • 如何使用 Jade / Pug 渲染内联 JavaScript?

    我正在尝试使用 Jade http jade lang com 让 JavaScript 在我的页面上呈现 我的项目是在 NodeJS 和 Express 中进行的 一切都正常工作 直到我想在头部编写一些内联 JavaScript 即使采用
  • 测试权限和 Android 应用清单文件

    我想知道是否有办法添加某些权限 或任何东西 到 android 清单文件 但这样它仅在测试运行期间使用 不在生产期间使用 我正在寻找一些程序化的东西 而不是在测试时剪切和粘贴 这是上下文 我正在读这篇文章 http developer an
  • 如何获得我的暴力破解的百分比?

    我需要帮助来了解如何计算脚本进度的百分比 因为这需要一段时间 具体取决于 CPU 时钟速度 RAM 和目标密码列表的长度 您能否为我指出正确的方向 或者向我展示如何计算此值的片段 import itertools math Alphabet
  • 似乎无法让 jquery resize 事件在 Modernizr 媒体查询功能上工作

    我正在尝试激活以下函数的调整大小事件 function if Modernizr mq only screen and min width 1140px div ss1 html div snip div div ss1 append di
  • Android 2.1:如何轮询现有蓝牙连接的 RSSI 值?

    我需要知道使用 Android 2 1 手机与远程设备建立蓝牙连接的信号强度 从SDK中 我可以看到我可以在发现远程设备时确定RSSI 但我不知道如何随着时间的推移更新该 RSSI 值 有人可以帮我吗 谢谢 从 SDK 中这是获取 RSSI
  • 在 C++ 中创建未知具体类型的副本

    假设我们有以下类层次结构 class Base class Derived1 public Base class Derived2 public Base Given a Base 这可能指向一个Derived1 or Derived2ob
  • Azure AD 和 Azure AD B2C 令牌之间的区别

    这些天我一直在研究 Azure AD 授权代码流 突然开始将所有内容转移到 Azure AD B2C 我发现 Azure AD 和 Azure AD B2C 之间有很多差异 有人可以回答我下面的问题吗 在Azure AD中 当我们注册本机应