auth0-java v1.0.0失败,错误400:用户未获得这些范围的受众授权

时间:2017-05-17 07:23:33

标签: java authentication auth0

我正在尝试开发一个微服务来处理与Auth0的身份验证。

我在其上一个版本中添加了auth0-java依赖项:

    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>auth0</artifactId>
        <version>1.0.0</version>
    </dependency>

该服务应该使用user / pwd并在Auth0上验证它并发送回AccessToken。

这是失败的代码:

    AuthAPI auth = new AuthAPI("my-domain.auth0.com", "xxx", "yyy");
    AuthRequest request = auth.login(username, password, "Username-Password-Authentication")
            .setAudience("https://my-domain.auth0.com/api/v2/")
            .setScope("openid name email app_metadata");
    try {
        TokenHolder holder = request.execute();
        return holder;
    } catch (Auth0Exception e) {
        throw new AuthentException("Error authenticating " + username, e);
    }

此代码失败:

  

请求失败,状态代码为400:用户未获得这些范围的受众授权

我尝试使用“读取:客户端读取:用户”等范围......但同样的问题。

然后我尝试使用旧版本0.4.0,它可以工作。

以下是工作代码:

    Auth0 auth = new Auth0("xxx", "my-domain.auth0.com");
    AuthenticationAPIClient client = auth.newAuthenticationAPIClient();
    try {
        Authentication execute = client.getProfileAfter(client.login(username, password)
                .setConnection("Username-Password-Authentication")).setScope("openid name email app_metadata").execute();
        return execute.getCredentials();
    } catch (APIException e) {
        throw new AuthentException("Error authenticating " + username, e);
    }

那么为什么0.4.0有效,而不是1.0.0?

1 个答案:

答案 0 :(得分:1)

使用1.0.0,您尝试对管理API的用户进行身份验证。您无法针对管理API对用户进行身份验证。 Auth0管理API仅允许通过client credentials grant reference

进行身份验证

使用0.4.0代码段,通过调用login api,您正在使用password授权对用户进行身份验证。

要使用1.0.0版本的密码授予对用户进行身份验证,您可以使用相同的代码段,但是请将受众设置为您自己的资源服务器(API),例如。 https://example.com/api。或者,如果您不想为特定受众获取访问令牌,请使用更简单的登录API reference