【问题标题】:Auth0 - Integration tests using an actual userAuth0 - 使用实际用户的集成测试
【发布时间】:2020-09-27 10:26:23
【问题描述】:

我一直在编写使用 Auth0 进行身份验证的集成测试。为了实现这一点,测试使用客户端密钥和密钥以及client_credentials 授权类型来测试我的 API,但 API 本身通常通过 password 授权类型处理经过身份验证的用户。

虽然我现在已经实现了通过之前调用中存储的 ID 提取用户详细信息的逻辑,但是因为我使用客户端而不是实际用户进行测试,所以在尝试获取该用户的详细信息。当我有一个标准用户时,这绝对可以正常工作,例如auth0|abcdefgh 通过带有回调的前端手动进行身份验证时。但是,当我从自动化测试中获得用户 ID 时,我有一个客户端 ID abcdefg@clients,然后我无法从中获取任何详细信息,例如“名字”。

是否可以在我的集成测试中以编程方式使用实际用户登录,或者使 Auth0 在使用从我的客户端凭据生成的 ID 时操纵属性。例如。声明名字是该客户端的测试等。到目前为止,客户端凭据运行良好,但现在我实际上尝试获取有关用户的更多详细信息,它已经撤消了!

【问题讨论】:

  • 您需要确定客户端凭据流是否映射用户详细信息?您可以确定客户端凭据流是否包含详细信息。您可以通过以下方式解码:jwt.io。如果不是,如果不是,则需要设计扩展。

标签: c# asp.net-core auth0


【解决方案1】:

最后,我按照这里的步骤https://auth0.com/docs/api-auth/tutorials/password-grant

总结:

  1. 在Auth0应用的高级设置中添加PasswordGrant Type。
  2. 将租户默认目录配置为要使用的连接。
  3. 以与下面类似的方式请求令牌(可以使用上面的链接找到其他语言和 curl 示例)
var client = new RestClient("https://YOUR_DOMAIN/oauth/token");
var request = new RestRequest(Method.POST);

request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&username=user%40example.com&password=pwd&audience=YOUR_API_IDENTIFIER&scope=read%3Asample&client_id=%24%7Baccount.clientId%7D&client_secret=YOUR_CLIENT_SECRET", ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

值得注意的是,这与我们的生产环境相去甚远!

附带说明,如果您有任何客户 MFA,您可能需要添加到规则中以确保您的集成测试用户不会通过 MFA 路线。

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多