繁体   English   中英

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

[英]Azure AD B2C get token programatically for unit testing

我的场景很简单我有一个简单的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);
}

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

提前致谢! 伊万

几个月前,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 

您可以在此处找到更多详细信息

您的单元测试是从Azure AD v1.0端点而不是Azure AD B2C v2.0端点获取令牌。

您的Azure功能期望该令牌由Azure AD B2C v2.0端点发布。

在短期内,您可以考虑使用HttpClient类重播浏览器请求,从Azure AD B2C v2.0端点获取令牌。

在短期内, Azure AD B2C对资源所有者密码凭据授予的支持将使您的单元测试能够通过将用户凭据发布到端点来从Azure AD B2C v2.0端点获取令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM