【问题标题】:Is it possible to generate IdTokens for AzureAd for writing End To End Tests with Protractor?是否可以为 AzureAd 生成 IdToken 以使用量角器编写端到端测试?
【发布时间】:2020-03-23 20:15:24
【问题描述】:

我们正在使用量角器为用 Angular 编写的应用程序编写端到端测试。该应用使用 ADAL 库通过 Azure AD 进行身份验证。

目前我们在测试开始前使用 WebDriver 点击 AzureAd 登录过程,但这很脆弱。我们遇到了根本无法加载 Microsoft 密码登录屏幕的问题。此外,本地登录过程可能会变得复杂,因为它有时需要我们的 Windows 凭据,有时不需要。

寻找替代品,是否可以生成:

  • 量角器启动过程 (onPrepare) 中的 idtoken 通过 Azure Ad 中的某个节点库(如护照?)直接?我可以稍后设置以供测试使用。
  • e2e 测试从配置文件中读取的某种永久存在的静态承载 idtoken?

还有其他我可能会遗漏的方法吗?

【问题讨论】:

    标签: oauth protractor azure-active-directory openid end-to-end


    【解决方案1】:

    您可以使用 ROPC 流程来获取测试令牌。 这是我认为可以使用此流程的情况之一。 使用它绕过普通应用程序中的登录屏幕是不行的。 它也不适用于所有类型的用户,联合用户有时可以工作,具体取决于它的设置方式。

    这是我用过的:

    // _authority = e.g. https://login.microsoftonline.com/company.com
    string tokenUrl = _authority + "oauth2/v2.0/token";
    var req = new HttpRequestMessage(HttpMethod.Post, tokenUrl)
    {
        Content = new FormUrlEncodedContent(new Dictionary<string, string>
        {
            ["grant_type"] = "password",
            ["client_id"] = settings.ClientId, // client id for your app
            ["client_secret"] = settings.ClientSecret, // client secret for your app
            ["scope"] = $"openid profile {_resourceUri}/.default", // here you define what you want tokens for
            ["username"] = settings.UserName,
            ["password"] = settings.Password
        })
    };
    
    HttpResponseMessage res = await _client.SendAsync(req);
    
    string json = await res.Content.ReadAsStringAsync();
    AadTokenResponse tokenResponse = JsonConvert.DeserializeObject<AadTokenResponse>(json);
    // tokenResponse.IdToken contains the ID token
    
    // The AadTokenResponse class:
    class AadTokenResponse
    {
        [JsonProperty("access_token")]
        public string AccessToken { get; set; }
    
        [JsonProperty("id_token")]
        public string IdToken { get; set; }
    }
    

    范围是您必须至少指定 openid 范围才能获得 ID 令牌的位置。 在这里,我还指定了一个 API 应用 ID URI + "/.default" 来获取 API 的访问令牌。 如果您只需要 id 令牌,则可以将范围保留为 openid profile

    请记住,您随后需要在测试配置中保护应用凭据和用户凭据。 另外,我建议这些凭据用于生产环境。 您可能需要创建仅限云的用户帐户才能正常工作。 此外,用户帐户不能启用 MFA。 如果他们的密码过期,您需要设置新密码并更新您的测试配置。

    【讨论】:

    • 非常感谢。我会检查是否有某种方法可以从节点进行。
    • 你应该可以,你需要为 HTTP 调用翻译 C# :)
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2022-12-20
    • 2019-07-11
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多