编程语言
首页 > 编程语言> > C#-Azure AD B2C以编程方式获取令牌以进行单元测试

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

作者:互联网

我的场景很简单,我有一个具有B2C身份验证的简单Azure函数,并且正在编写单元测试,但是发现了一个问题,我无法通过编程方式对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发布了一个资源所有者密码凭据流策略,使用该策略,您可以模拟一个在查询中传递登录详细信息的登录,如下所示:

>在B2C中创建ROPC策略
>注册申请
>如下测试策略:

  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

您可以找到更多详细的信息here

标签:azure-ad-b2c,unit-testing,azure,azure-functions,c
来源: https://codeday.me/bug/20191109/2012288.html