Azure AD B2C 以编程方式获取令牌以进行单元测试

Iva*_*nes 6 c# unit-testing azure azure-ad-b2c azure-functions

我的场景很简单,我有一个简单的 Azure 函数,上面有 B2C 身份验证,我正在编写单元测试,但我发现了一个问题,我无法以编程方式对 azure 函数进行身份验证。

我可以通过浏览器访问,甚至可以获取令牌并将其放入单元测试中,并且工作正常,但是当我尝试使用 ClientID、TenantID 等生成令牌时,我得到了一个令牌,但是401 Azure 函数上的未经授权的响应。

有没有办法以编程方式生成有效的 B2C 令牌(无需在浏览器中登录?

到目前为止我使用的方法:

public static async  Task<AuthenticationResult> GetAccessToken(string resourceUri, string clientId, string clientSecret)
{
        ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);

        string aadInstance = "https://login.microsoftonline.com/";
        string tenant = "<mytenant>.onmicrosoft.com";
        string authority = string.Concat(aadInstance, tenant);
        AuthenticationContext authContext = new AuthenticationContext(authority);

        return await authContext.AcquireTokenAsync(resourceUri, clientCredential);
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个令牌(EY.......)但无效,当我传递给Azure Function请求时,它返回401 Unauthorized。

提前致谢!伊万

Iva*_*nes 7

几个月前,Microsoft 发布了一项针对资源所有者密码凭据流的策略,通过该策略,您可以模拟在查询中传递登录详细信息的登录,如下所示:

  1. 在 B2C 中创建 ROPC 策略
  2. 注册申请
  3. 测试策略如下:

      https://te.cpim.windows.net/{B2C TENANT}/{ROPC B2C POLICY}/oauth2/v2.0/token?username={USERNAME}&password={password}&grant_type=password&scope=openid+{CLIENT ID}+offline_access&client_id=[CLIENT ID]&response_type=token+id_token
    
    Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多详细信息