From 1011d4daefb1c3348cf4f48e7d4c039595c6f11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9A=E8=BF=9B?= Date: Thu, 3 Nov 2022 14:14:13 +0800 Subject: [PATCH] =?UTF-8?q?update-security-settings=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/java/client/AuthenticationClient.java | 396 ++++++++++-------- .../sdk/java/client/ManagementClient.java | 227 ++++------ .../sdk/java/dto/AdminAuditLogDto.java | 189 ++++++++- .../sdk/java/dto/CreateIdentityDto.java | 24 ++ .../sdk/java/dto/EmailTemplateDto.java | 4 +- .../dto/GetWechatMiniProgramPhoneDto.java | 24 +- .../cn/authing/sdk/java/dto/IdentityDto.java | 24 ++ .../dto/LoginAnomalyDetectionConfigDto.java | 83 +++- .../sdk/java/dto/LoginFailCheckConfigDto.java | 12 + .../dto/LoginPassowrdFailCheckConfigDto.java | 16 +- .../sdk/java/dto/PreviewEmailTemplateDto.java | 4 +- .../sdk/java/dto/QrcodeLoginStrategyDto.java | 28 +- .../java/dto/SelfUnlockAccountConfigDto.java | 31 +- .../sdk/java/dto/UpdateEmailTemplateDto.java | 4 +- .../java/dto/UpdateSecuritySettingsDto.java | 6 +- .../GetWechatMiniprogramPhoneTest.java | 31 -- .../UpdateSecuritySettingsTest.java | 32 +- 17 files changed, 742 insertions(+), 393 deletions(-) delete mode 100644 src/test/java/test/authentication/GetWechatMiniprogramPhoneTest.java diff --git a/src/main/java/cn/authing/sdk/java/client/AuthenticationClient.java b/src/main/java/cn/authing/sdk/java/client/AuthenticationClient.java index ec3a3aeb..4ea219d9 100644 --- a/src/main/java/cn/authing/sdk/java/client/AuthenticationClient.java +++ b/src/main/java/cn/authing/sdk/java/client/AuthenticationClient.java @@ -41,7 +41,8 @@ public class AuthenticationClient extends BaseClient { private final String appId; private JWKSet jwks; - public AuthenticationClient(AuthenticationClientOptions options) throws IOException, ParseException { + public AuthenticationClient(AuthenticationClientOptions options) + throws IOException, ParseException { super(options); // 必要参数校验 this.options = options; @@ -60,7 +61,8 @@ private JWKSet fetchJwks() throws IOException, ParseException { if (this.jwks != null) { return this.jwks; } else { - JWKSet jwks = JWKSet.load(new URL(this.options.getAppHost() + "/oidc/.well-known/jwks.json")); + JWKSet jwks = JWKSet.load( + new URL(this.options.getAppHost() + "/oidc/.well-known/jwks.json")); this.jwks = jwks; return jwks; } @@ -101,7 +103,8 @@ public AccessToken introspectAccessTokenOffline(String token) throws Exception { } public OIDCTokenResponse getAccessTokenByCode(String code) throws Exception { - if ((StrUtil.isBlank(this.options.getAppId()) || StrUtil.isBlank(this.options.getAppSecret())) + if ((StrUtil.isBlank(this.options.getAppId()) || StrUtil.isBlank( + this.options.getAppSecret())) && this.options.getTokenEndPointAuthMethod() != AuthMethodEnum.NONE.getValue()) { throw new Exception("请在初始化 AuthenticationClient 时传入 appId 和 secret 参数"); } @@ -126,11 +129,14 @@ public OIDCTokenResponse getAccessTokenByCode(String code) throws Exception { HashMap headerMap = new HashMap<>(); headerMap.put(Header.CONTENT_TYPE.getValue(), "application/x-www-form-urlencoded"); - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { tokenParam.setClientId(this.options.getAppId()); tokenParam.setClientSecret(this.options.getAppSecret()); - } else if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_BASIC.getValue()) { - String basic64Str = "Basic " + Base64.getEncoder().encodeToString((this.options.getAppId() + ":" + this.options.getAppSecret()).getBytes()); + } else if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_BASIC.getValue()) { + String basic64Str = "Basic " + Base64.getEncoder().encodeToString( + (this.options.getAppId() + ":" + this.options.getAppSecret()).getBytes()); headerMap.put("Authorization", basic64Str); } else { // AuthMethodEnum.NONE @@ -151,7 +157,8 @@ public OIDCTokenResponse getAccessTokenByCode(String code) throws Exception { * 检验 CAS 1.0 Ticket 合法性 */ public ValidateTicketV1Response validateTicketV1(String ticket, String service) { - String url = this.options.getAppHost() + "/cas-idp/" + this.options.getAppId() + "/validate"; + String url = + this.options.getAppHost() + "/cas-idp/" + this.options.getAppId() + "/validate"; Map paramsMap = new HashMap<>(); paramsMap.put("ticket", ticket); @@ -164,7 +171,8 @@ public ValidateTicketV1Response validateTicketV1(String ticket, String service) String response = request(config); - ValidateTicketV1Response validateTicketV1Response = deserialize(response, ValidateTicketV1Response.class); + ValidateTicketV1Response validateTicketV1Response = deserialize(response, + ValidateTicketV1Response.class); System.out.println("ValidateTicketV1Response:" + validateTicketV1Response.toString()); @@ -179,7 +187,8 @@ public String validateTicketV2(String ticket, String service, String format) thr if (format != "XML" && format != "JSON") { throw new Exception("format 参数可选值为 XML、JSON,请检查输入"); } - String url = this.options.getAppHost() + "/cas-idp/" + this.options.getAppId() + "/serviceValidate"; + String url = this.options.getAppHost() + "/cas-idp/" + this.options.getAppId() + + "/serviceValidate"; Map paramsMap = new HashMap<>(); paramsMap.put("ticket", ticket); @@ -228,11 +237,13 @@ public String getCodeChallengeDigest(CodeChallengeDigestParam options) throws Ex * @throws Exception */ public String buildLogoutUrl(BuildLogoutUrlParams params) throws Exception { - if (this.options.getProtocol() == ProtocolEnum.OAUTH.getValue()) + if (this.options.getProtocol() == ProtocolEnum.OAUTH.getValue()) { return this.buildCasLogoutUrl(params); + } - if (this.options.getProtocol() == ProtocolEnum.OIDC.getValue()) + if (this.options.getProtocol() == ProtocolEnum.OIDC.getValue()) { return this.buildOidcLogoutUrl(params); + } return buildEasyLogoutUrl(params); } @@ -240,7 +251,8 @@ public String buildLogoutUrl(BuildLogoutUrlParams params) throws Exception { private String buildCasLogoutUrl(BuildLogoutUrlParams params) { String url = ""; if (StrUtil.isNotBlank(params.getPostLogoutRedirectUri())) { - url = this.options.getAppHost() + "/cas-idp/logout?url=" + params.getPostLogoutRedirectUri(); + url = this.options.getAppHost() + "/cas-idp/logout?url=" + + params.getPostLogoutRedirectUri(); } else { url = this.options.getAppHost() + "/cas-idp/logout"; } @@ -254,7 +266,8 @@ private String buildOidcLogoutUrl(BuildLogoutUrlParams params) throws Exception } String url = ""; if (StrUtil.isNotBlank(params.getPostLogoutRedirectUri())) { - url = this.options.getAppHost() + "/oidc/session/end?id_token_hint=" + params.getIdTokenHint() + url = this.options.getAppHost() + "/oidc/session/end?id_token_hint=" + + params.getIdTokenHint() + "&post_logout_redirect_uri=" + params.getPostLogoutRedirectUri(); } else { url = this.options.getAppHost() + "/oidc/session/end"; @@ -265,7 +278,8 @@ private String buildOidcLogoutUrl(BuildLogoutUrlParams params) throws Exception private String buildEasyLogoutUrl(BuildLogoutUrlParams params) throws Exception { String url = ""; if (StrUtil.isNotBlank(params.getPostLogoutRedirectUri())) { - url = this.options.getAppHost() + "/login/profile/logout?redirect_uri=" + params.getPostLogoutRedirectUri(); + url = this.options.getAppHost() + "/login/profile/logout?redirect_uri=" + + params.getPostLogoutRedirectUri(); } else { url = this.options.getAppHost() + "/login/profile/logout"; } @@ -275,13 +289,16 @@ private String buildEasyLogoutUrl(BuildLogoutUrlParams params) throws Exception /** * Client Credentials 模式获取 Access Token */ - public GetAccessTokenByClientCredentialsRespDto getAccessTokenByClientCredentials(String scope, ClientCredentialInput options) throws Exception { + public GetAccessTokenByClientCredentialsRespDto getAccessTokenByClientCredentials(String scope, + ClientCredentialInput options) throws Exception { if (StrUtil.isEmpty(scope)) { - throw new InvalidParameterException("请传入 scope 参数,请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html"); + throw new InvalidParameterException( + "请传入 scope 参数,请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html"); } if (options == null) { - throw new InvalidParameterException("请在调用本方法时传入 { accessKey: string, accessSecret: string },请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html"); + throw new InvalidParameterException( + "请在调用本方法时传入 { accessKey: string, accessSecret: string },请看文档:https://docs.authing.cn/v2/guides/authorization/m2m-authz.html"); } GetAccessTokenByClientCredentialsDto reqDto = new GetAccessTokenByClientCredentialsDto(); @@ -331,22 +348,29 @@ public String buildAuthorizeUrl(IOidcParams params) { } if (!ProtocolEnum.OIDC.getValue().equals(options.getProtocol())) { - throw new InvalidParameterException("初始化 AuthenticationClient 传入的 protocol 应为 ProtocolEnum.OIDC 不应该为 $protocol"); + throw new InvalidParameterException( + "初始化 AuthenticationClient 传入的 protocol 应为 ProtocolEnum.OIDC 不应该为 $protocol"); } if (StrUtil.isEmpty(options.getRedirectUri()) && StrUtil.isEmpty(params.getRedirectUri())) { - throw new InvalidParameterException("redirectUri 不应该为空 解决方法:请在 AuthenticationClient 初始化时传入 redirectUri,或者调用 buildAuthorizeUrl 时传入 redirectUri"); + throw new InvalidParameterException( + "redirectUri 不应该为空 解决方法:请在 AuthenticationClient 初始化时传入 redirectUri,或者调用 buildAuthorizeUrl 时传入 redirectUri"); } Map map = new HashMap<>(); map.put("client_id", options.getAppId()); - map.put("scope", Optional.ofNullable(params.getScope()).orElse("openid profile email phone address")); - map.put("state", Optional.ofNullable(params.getState()).orElse(CommonUtils.createRandomString(12))); - map.put("nonce", Optional.ofNullable(params.getNonce()).orElse(CommonUtils.createRandomString(12))); + map.put("scope", Optional.ofNullable(params.getScope()) + .orElse("openid profile email phone address")); + map.put("state", + Optional.ofNullable(params.getState()).orElse(CommonUtils.createRandomString(12))); + map.put("nonce", + Optional.ofNullable(params.getNonce()).orElse(CommonUtils.createRandomString(12))); map.put("response_mode", Optional.ofNullable(params.getResponseMode()).orElse(null)); map.put("response_type", Optional.ofNullable(params.getResponseType()).orElse("code")); - map.put("redirect_uri", Optional.ofNullable(params.getRedirectUri()).orElse(options.getRedirectUri())); - map.put("prompt", params.getScope() != null && params.getScope().contains("offline_access") ? "consent" : null); + map.put("redirect_uri", + Optional.ofNullable(params.getRedirectUri()).orElse(options.getRedirectUri())); + map.put("prompt", params.getScope() != null && params.getScope().contains("offline_access") + ? "consent" : null); return HttpUtils.buildUrlWithQueryParams(options.getAppHost() + "/oidc/auth", map); } @@ -354,7 +378,8 @@ public String buildAuthorizeUrl(IOidcParams params) { /** * 使用 Refresh token 获取新的 Access token */ - public GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshToken(String refreshToken) { + public GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshToken( + String refreshToken) { verificationProtocol(); String tokenEndPointAuthMethod = options.getTokenEndPointAuthMethod(); @@ -368,15 +393,20 @@ public GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshToken(St } private void verificationProtocol() { - if (!(ProtocolEnum.OAUTH.getValue().equals(options.getProtocol()) || ProtocolEnum.OIDC.getValue().equals(options.getProtocol()))) { - throw new InvalidParameterException("初始化 AuthenticationClient 时传入的 protocol 参数必须为 ProtocolEnum.OAUTH 或 ProtocolEnum.OIDC,请检查参数"); + if (!(ProtocolEnum.OAUTH.getValue().equals(options.getProtocol()) + || ProtocolEnum.OIDC.getValue().equals(options.getProtocol()))) { + throw new InvalidParameterException( + "初始化 AuthenticationClient 时传入的 protocol 参数必须为 ProtocolEnum.OAUTH 或 ProtocolEnum.OIDC,请检查参数"); } - if (StrUtil.isEmpty(options.getAppSecret()) && !AuthMethodEnum.NONE.getValue().equals(options.getTokenEndPointAuthMethod())) { - throw new InvalidParameterException("请在初始化 AuthenticationClient 时传入 appId 和 secret 参数"); + if (StrUtil.isEmpty(options.getAppSecret()) && !AuthMethodEnum.NONE.getValue() + .equals(options.getTokenEndPointAuthMethod())) { + throw new InvalidParameterException( + "请在初始化 AuthenticationClient 时传入 appId 和 secret 参数"); } } - private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithClientSecretPost(String refreshToken) { + private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithClientSecretPost( + String refreshToken) { AuthingRequestConfig config = new AuthingRequestConfig(); if (ProtocolEnum.OIDC.getValue().equals(options.getProtocol())) { @@ -402,8 +432,10 @@ private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWi return deserialize(response, GetNewAccessTokenByRefreshTokenRespDto.class); } - private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithClientSecretBasic(String refreshToken) { - String basic64Str = "Basic " + Base64Encoder.encode((options.getAppId() + ":" + options.getAppSecret()).getBytes()); + private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithClientSecretBasic( + String refreshToken) { + String basic64Str = "Basic " + Base64Encoder.encode( + (options.getAppId() + ":" + options.getAppSecret()).getBytes()); AuthingRequestConfig config = new AuthingRequestConfig(); @@ -429,7 +461,8 @@ private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWi return deserialize(resqonse, GetNewAccessTokenByRefreshTokenRespDto.class); } - private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithNone(String refreshToken) { + private GetNewAccessTokenByRefreshTokenRespDto getNewAccessTokenByRefreshTokenWithNone( + String refreshToken) { AuthingRequestConfig config = new AuthingRequestConfig(); if (ProtocolEnum.OIDC.getValue().equals(options.getProtocol())) { @@ -463,7 +496,8 @@ public IntrospectTokenRespDto introspectToken(String token) { String introspectionEndPointAuthMethod = options.getIntrospectionEndPointAuthMethod(); if (AuthMethodEnum.CLIENT_SECRET_POST.getValue().equals(introspectionEndPointAuthMethod)) { return introspectTokenWithClientSecretPost(token); - } else if (AuthMethodEnum.CLIENT_SECRET_BASIC.getValue().equals(introspectionEndPointAuthMethod)) { + } else if (AuthMethodEnum.CLIENT_SECRET_BASIC.getValue() + .equals(introspectionEndPointAuthMethod)) { return introspectTokenWithClientSecretBasic(token); } else { return introspectTokenWithNone(token); @@ -496,7 +530,8 @@ private IntrospectTokenRespDto introspectTokenWithClientSecretPost(String token) } private IntrospectTokenRespDto introspectTokenWithClientSecretBasic(String token) { - String basic64Str = "Basic " + Base64Encoder.encode((options.getAppId() + ":" + options.getAppSecret()).getBytes()); + String basic64Str = "Basic " + Base64Encoder.encode( + (options.getAppId() + ":" + options.getAppSecret()).getBytes()); AuthingRequestConfig config = new AuthingRequestConfig(); @@ -552,7 +587,8 @@ public ValidateTokenRespDto validateToken(ValidateTokenParams params) { String idToken = params.getIdToken(); String accessToken = params.getAccessToken(); if (idToken == null && accessToken == null) { - throw new InvalidParameterException("请在传入的参数对象中包含 accessToken 或 idToken 字段"); + throw new InvalidParameterException( + "请在传入的参数对象中包含 accessToken 或 idToken 字段"); } if (accessToken != null && idToken != null) { throw new InvalidParameterException("accessToken 和 idToken 只能传入一个,不能同时传入"); @@ -585,7 +621,8 @@ public boolean revokeToken(String token) { String revocationEndPointAuthMethod = options.getRevocationEndPointAuthMethod(); if (AuthMethodEnum.CLIENT_SECRET_POST.getValue().equals(revocationEndPointAuthMethod)) { return revokeTokenWithClientSecretPost(token); - } else if (AuthMethodEnum.CLIENT_SECRET_BASIC.getValue().equals(revocationEndPointAuthMethod)) { + } else if (AuthMethodEnum.CLIENT_SECRET_BASIC.getValue() + .equals(revocationEndPointAuthMethod)) { return revokeTokenWithClientSecretBasic(token); } else { return revokeTokenWithNone(token); @@ -620,10 +657,12 @@ private boolean revokeTokenWithClientSecretPost(String token) { private boolean revokeTokenWithClientSecretBasic(String token) { if (ProtocolEnum.OAUTH.getValue().equals(options.getProtocol())) { - throw new InvalidParameterException("OAuth 2.0 暂不支持用 client_secret_basic 模式身份验证撤回 Token"); + throw new InvalidParameterException( + "OAuth 2.0 暂不支持用 client_secret_basic 模式身份验证撤回 Token"); } - String basic64Str = "Basic " + Base64Encoder.encode((options.getAppId() + ":" + options.getAppSecret()).getBytes()); + String basic64Str = "Basic " + Base64Encoder.encode( + (options.getAppId() + ":" + options.getAppSecret()).getBytes()); AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/oidc/token/revocation"); @@ -670,11 +709,14 @@ private boolean revokeTokenWithNone(String token) { * 使用用户名 + 密码登录 * * @param username 用户名 - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByUsernamePassword(String username, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByUsernamePassword(String username, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -690,7 +732,8 @@ public LoginTokenRespDto signInByUsernamePassword(String username, String passwo dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -702,11 +745,14 @@ public LoginTokenRespDto signInByUsernamePassword(String username, String passwo * 使用邮箱 + 密码登录 * * @param email 邮箱 - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByEmailPassword(String email, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByEmailPassword(String email, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -722,7 +768,8 @@ public LoginTokenRespDto signInByEmailPassword(String email, String password, Si dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -734,11 +781,14 @@ public LoginTokenRespDto signInByEmailPassword(String email, String password, Si * 使用手机号 + 密码登录 * * @param phone 手机号 - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByPhonePassword(String phone, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByPhonePassword(String phone, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -754,7 +804,8 @@ public LoginTokenRespDto signInByPhonePassword(String phone, String password, Si dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -766,11 +817,14 @@ public LoginTokenRespDto signInByPhonePassword(String phone, String password, Si * 使用账号(手机号/邮箱/用户名) + 密码登录 * * @param acconnt 账号(手机号/邮箱/用户名) - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByAccountPassword(String acconnt, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByAccountPassword(String acconnt, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -786,7 +840,8 @@ public LoginTokenRespDto signInByAccountPassword(String acconnt, String password dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -804,7 +859,8 @@ public LoginTokenRespDto signInByAccountPassword(String acconnt, String password * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByPhonePassCode(String phone, String passCode, String phoneCountryCode, SignInOptionsDto options) { + public LoginTokenRespDto signInByPhonePassCode(String phone, String passCode, + String phoneCountryCode, SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -821,7 +877,8 @@ public LoginTokenRespDto signInByPhonePassCode(String phone, String passCode, St dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -837,7 +894,8 @@ public LoginTokenRespDto signInByPhonePassCode(String phone, String passCode, St * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByEmailPassCode(String email, String passCode, SignInOptionsDto options) { + public LoginTokenRespDto signInByEmailPassCode(String email, String passCode, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -853,7 +911,8 @@ public LoginTokenRespDto signInByEmailPassCode(String email, String passCode, Si dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -865,11 +924,14 @@ public LoginTokenRespDto signInByEmailPassCode(String email, String passCode, Si * 使用 LDAP 账号密码登录 * * @param sAMAccountName LDAP 用户目录中账号的 sAMAccountName - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByLDAP(String sAMAccountName, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByLDAP(String sAMAccountName, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -885,7 +947,8 @@ public LoginTokenRespDto signInByLDAP(String sAMAccountName, String password, Si dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -897,11 +960,14 @@ public LoginTokenRespDto signInByLDAP(String sAMAccountName, String password, Si * 使用 AD 账号密码登录 * * @param sAMAccountName LDAP 用户目录中账号的 sAMAccountName - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param options 认证可选参数 * @return */ - public LoginTokenRespDto signInByAD(String sAMAccountName, String password, SignInOptionsDto options) { + public LoginTokenRespDto signInByAD(String sAMAccountName, String password, + SignInOptionsDto options) { SigninByCredentialsDto dto = new SigninByCredentialsDto(); // 设置认证方式 @@ -917,7 +983,8 @@ public LoginTokenRespDto signInByAD(String sAMAccountName, String password, Sign dto.setOptions(options); // 设置 client_id 和 client_secret - if (this.options.getTokenEndPointAuthMethod() == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { + if (this.options.getTokenEndPointAuthMethod() + == AuthMethodEnum.CLIENT_SECRET_POST.getValue()) { dto.setClientId(this.options.getAppId()); dto.setClientSecret(this.options.getAppSecret()); } @@ -930,12 +997,15 @@ public LoginTokenRespDto signInByAD(String sAMAccountName, String password, Sign * 使用用户名 + 密码注册 * * @param username 用户名 - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param profile 注册时额外设置的用户资料,可选 * @param options 注册可选参数 * @return */ - public UserSingleRespDto signUpByUsernamePassword(String username, String password, SignUpProfileDto profile, SignUpOptionsDto options) { + public UserSingleRespDto signUpByUsernamePassword(String username, String password, + SignUpProfileDto profile, SignUpOptionsDto options) { SignUpDto dto = new SignUpDto(); // 设置认证方式 @@ -960,12 +1030,15 @@ public UserSingleRespDto signUpByUsernamePassword(String username, String passwo * 使用邮箱 + 密码注册 * * @param email 邮箱 - * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 + * @param password 用户密码,默认不加密。Authing 所有 API 均通过 HTTPS + * 协议对密码进行安全传输,可以在一定程度上保证安全性。如果你还需要更高级别的安全性,我们还支持 `RSA256` 和国密 `SM2` + * 的密码加密方式。详情见可选参数 `options.passwordEncryptType`。 * @param profile 注册时额外设置的用户资料,可选 * @param options 注册可选参数 * @return */ - public UserSingleRespDto signUpByEmailPassword(String email, String password, SignUpProfileDto profile, SignUpOptionsDto options) { + public UserSingleRespDto signUpByEmailPassword(String email, String password, + SignUpProfileDto profile, SignUpOptionsDto options) { SignUpDto dto = new SignUpDto(); // 设置认证方式 @@ -995,7 +1068,8 @@ public UserSingleRespDto signUpByEmailPassword(String email, String password, Si * @param options 注册可选参数 * @return */ - public UserSingleRespDto signUpByEmailPassCode(String email, String passCode, SignUpProfileDto profile, SignUpOptionsDto options) { + public UserSingleRespDto signUpByEmailPassCode(String email, String passCode, + SignUpProfileDto profile, SignUpOptionsDto options) { SignUpDto dto = new SignUpDto(); // 设置认证方式 @@ -1026,7 +1100,8 @@ public UserSingleRespDto signUpByEmailPassCode(String email, String passCode, Si * @param options 注册可选参数 * @return */ - public UserSingleRespDto signUpByPhonePassCode(String phone, String passCode, String phoneCountryCode, SignUpProfileDto profile, SignUpOptionsDto options) { + public UserSingleRespDto signUpByPhonePassCode(String phone, String passCode, + String phoneCountryCode, SignUpProfileDto profile, SignUpOptionsDto options) { SignUpDto dto = new SignUpDto(); // 设置认证方式 @@ -1048,12 +1123,12 @@ public UserSingleRespDto signUpByPhonePassCode(String phone, String passCode, St return this.signUp(dto); } - // ==== AUTO GENERATED AUTHENTICATION METHODS BEGIN ==== /** * @summary 使用用户凭证登录 - * @description 此端点为基于直接 API 调用形式的登录端点,适用于你需要自建登录页面的场景。**此端点暂时不支持 MFA、信息补全、首次密码重置等流程,如有需要,请使用 OIDC 标准协议认证端点。** + * @description 此端点为基于直接 API 调用形式的登录端点,适用于你需要自建登录页面的场景。**此端点暂时不支持 MFA、信息补全、首次密码重置等流程,如有需要,请使用 + * OIDC 标准协议认证端点。** *

*

* 注意事项:取决于你在 Authing 创建应用时选择的**应用类型**和应用配置的**换取 token 身份验证方式**,在调用此接口时需要对客户端的身份进行不同形式的验证。 @@ -1063,8 +1138,8 @@ public UserSingleRespDto signUpByPhonePassCode(String phone, String passCode, St * *
*

- * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - **其他设置** - **授权配置** - * 中找到**换取 token 身份验证方式** 配置项: + * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - + * **其他设置** - **授权配置** 中找到**换取 token 身份验证方式** 配置项: *

* > 单页 Web 应用和客户端应用隐藏,默认为 `none`,不允许修改;后端应用和标准 Web 应用可以修改此配置项。 *

@@ -1076,27 +1151,23 @@ public UserSingleRespDto signUpByPhonePassCode(String phone, String passCode, St *

* #### 换取 token 身份验证方式为 client_secret_post 时 *

- * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。 + * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 + * ID、`client_secret` 为应用密钥。 *

* #### 换取 token 身份验证方式为 client_secret_basic 时 *

- * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。): + * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 + * `client_id` 为应用 ID、`client_secret` 为应用密钥。): *

- * ``` - * Basic base64(:) - * ``` + * ``` Basic base64(:) ``` *

* 结果示例: *

- * ``` - * Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 - * ``` + * ``` Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 ``` *

* JS 代码示例: *

- * ```js - * 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); - * ``` + * ```js 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); ``` * * **/ @@ -1111,7 +1182,8 @@ public LoginTokenRespDto signInByCredentials(SigninByCredentialsDto reqDto) { /** * @summary 使用移动端社会化登录 - * @description 此端点为移动端社会化登录接口,使用第三方移动社会化登录返回的临时凭证登录,并换取用户的 `id_token` 和 `access_token`。请先阅读相应社会化登录的接入流程。 + * @description 此端点为移动端社会化登录接口,使用第三方移动社会化登录返回的临时凭证登录,并换取用户的 `id_token` 和 + * `access_token`。请先阅读相应社会化登录的接入流程。 *

*

* 注意事项:取决于你在 Authing 创建应用时选择的**应用类型**和应用配置的**换取 token 身份验证方式**,在调用此接口时需要对客户端的身份进行不同形式的验证。 @@ -1121,8 +1193,8 @@ public LoginTokenRespDto signInByCredentials(SigninByCredentialsDto reqDto) { * *
*

- * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - **其他设置** - **授权配置** - * 中找到**换取 token 身份验证方式** 配置项: + * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - + * **其他设置** - **授权配置** 中找到**换取 token 身份验证方式** 配置项: *

* > 单页 Web 应用和客户端应用隐藏,默认为 `none`,不允许修改;后端应用和标准 Web 应用可以修改此配置项。 *

@@ -1134,27 +1206,23 @@ public LoginTokenRespDto signInByCredentials(SigninByCredentialsDto reqDto) { *

* #### 换取 token 身份验证方式为 client_secret_post 时 *

- * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。 + * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 + * ID、`client_secret` 为应用密钥。 *

* #### 换取 token 身份验证方式为 client_secret_basic 时 *

- * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。): + * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 + * `client_id` 为应用 ID、`client_secret` 为应用密钥。): *

- * ``` - * Basic base64(:) - * ``` + * ``` Basic base64(:) ``` *

* 结果示例: *

- * ``` - * Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 - * ``` + * ``` Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 ``` *

* JS 代码示例: *

- * ```js - * 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); - * ``` + * ```js 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); ``` * * **/ @@ -1195,7 +1263,8 @@ public GeneQRCodeRespDto geneQrCode(GenerateQrcodeDto reqDto) { /** * @summary 查询二维码状态 - * @description 按照用户扫码顺序,共分为未扫码、已扫码等待用户确认、用户同意/取消授权、二维码过期以及未知错误六种状态,前端应该通过不同的状态给到用户不同的反馈。你可以通过下面这篇文章了解扫码登录详细的流程:https://docs.authing.cn/v2/concepts/how-qrcode-works.html. + * @description + * 按照用户扫码顺序,共分为未扫码、已扫码等待用户确认、用户同意/取消授权、二维码过期以及未知错误六种状态,前端应该通过不同的状态给到用户不同的反馈。你可以通过下面这篇文章了解扫码登录详细的流程:https://docs.authing.cn/v2/concepts/how-qrcode-works.html. **/ public CheckQRCodeStatusRespDto checkQrCodeStatus(CheckQrcodeStatusDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1218,8 +1287,8 @@ public CheckQRCodeStatusRespDto checkQrCodeStatus(CheckQrcodeStatusDto reqDto) { * *
*

- * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - **其他设置** - **授权配置** - * 中找到**换取 token 身份验证方式** 配置项: + * 你可以在 [Authing 控制台](https://console.authing.cn) 的**应用** - **自建应用** - **应用详情** - **应用配置** - + * **其他设置** - **授权配置** 中找到**换取 token 身份验证方式** 配置项: *

* > 单页 Web 应用和客户端应用隐藏,默认为 `none`,不允许修改;后端应用和标准 Web 应用可以修改此配置项。 *

@@ -1231,31 +1300,28 @@ public CheckQRCodeStatusRespDto checkQrCodeStatus(CheckQrcodeStatusDto reqDto) { *

* #### 换取 token 身份验证方式为 client_secret_post 时 *

- * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。 + * 调用此接口时必须在 body 中传递 `client_id` 和 `client_secret` 参数,作为验证客户端身份的条件。其中 `client_id` 为应用 + * ID、`client_secret` 为应用密钥。 *

* #### 换取 token 身份验证方式为 client_secret_basic 时 *

- * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 `client_id` 为应用 ID、`client_secret` 为应用密钥。): + * 调用此接口时必须在 HTTP 请求头中携带 `authorization` 请求头,作为验证客户端身份的条件。`authorization` 请求头的格式如下(其中 + * `client_id` 为应用 ID、`client_secret` 为应用密钥。): *

- * ``` - * Basic base64(:) - * ``` + * ``` Basic base64(:) ``` *

* 结果示例: *

- * ``` - * Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 - * ``` + * ``` Basic NjA2M2ZiMmYzY3h4eHg2ZGY1NWYzOWViOjJmZTdjODdhODFmODY3eHh4eDAzMjRkZjEyZGFlZGM3 ``` *

* JS 代码示例: *

- * ```js - * 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); - * ``` + * ```js 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); ``` * * **/ - public LoginTokenRespDto exchangeTokenSetWithQrCodeTicket(ExchangeTokenSetWithQRcodeTicketDto reqDto) { + public LoginTokenRespDto exchangeTokenSetWithQrCodeTicket( + ExchangeTokenSetWithQRcodeTicketDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/exchange-tokenset-with-qrcode-ticket"); config.setBody(reqDto); @@ -1266,7 +1332,8 @@ public LoginTokenRespDto exchangeTokenSetWithQrCodeTicket(ExchangeTokenSetWithQR /** * @summary 自建 APP 扫码登录:APP 端修改二维码状态 - * @description 此端点用于在自建 APP 扫码登录中修改二维码状态,对应着在浏览器渲染出二维码之后,终端用户扫码、确认授权、取消授权的过程。**此接口要求具备用户的登录态**。 + * @description 此端点用于在自建 APP + * 扫码登录中修改二维码状态,对应着在浏览器渲染出二维码之后,终端用户扫码、确认授权、取消授权的过程。**此接口要求具备用户的登录态**。 **/ public CommonResponseDto changeQrCodeStatus(ChangeQRCodeStatusDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1305,7 +1372,8 @@ public SendEmailRespDto sendEmail(SendEmailDto reqDto) { /** * @summary 获取用户资料 - * @description 此端点用户获取用户资料,需要在请求头中带上用户的 `access_token`,Authing 服务器会根据用户 `access_token` 中的 `scope` 返回对应的字段。 + * @description 此端点用户获取用户资料,需要在请求头中带上用户的 `access_token`,Authing 服务器会根据用户 `access_token` 中的 + * `scope` 返回对应的字段。 **/ public UserSingleRespDto getProfile(GetProfileDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1331,7 +1399,8 @@ public UserSingleRespDto updateProfile(UpdateUserProfileDto reqDto) { /** * @summary 绑定邮箱 - * @description 如果用户还**没有绑定邮箱**,此接口可用于用户**自主**绑定邮箱。如果用户已经绑定邮箱想要修改邮箱,请使用**修改邮箱**接口。你需要先调用**发送邮件**接口发送邮箱验证码。 + * @description + * 如果用户还**没有绑定邮箱**,此接口可用于用户**自主**绑定邮箱。如果用户已经绑定邮箱想要修改邮箱,请使用**修改邮箱**接口。你需要先调用**发送邮件**接口发送邮箱验证码。 **/ public CommonResponseDto bindEmail(BindEmailDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1357,7 +1426,8 @@ public CommonResponseDto unbindEmail(UnbindEmailDto reqDto) { /** * @summary 绑定手机号 - * @description 如果用户还**没有绑定手机号**,此接口可用于用户**自主**绑定手机号。如果用户已经绑定手机号想要修改手机号,请使用**修改手机号**接口。你需要先调用**发送短信**接口发送短信验证码。 + * @description + * 如果用户还**没有绑定手机号**,此接口可用于用户**自主**绑定手机号。如果用户已经绑定手机号想要修改手机号,请使用**修改手机号**接口。你需要先调用**发送短信**接口发送短信验证码。 **/ public CommonResponseDto bindPhone(BindPhoneDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1409,9 +1479,11 @@ public CommonResponseDto updatePassword(UpdatePasswordDto reqDto) { /** * @summary 发起修改邮箱的验证请求 - * @description 终端用户自主修改邮箱时,需要提供相应的验证手段。此接口用于验证用户的修改邮箱请求是否合法。当前支持通过**邮箱验证码**的方式进行验证,你需要先调用发送邮件接口发送对应的邮件验证码。 + * @description + * 终端用户自主修改邮箱时,需要提供相应的验证手段。此接口用于验证用户的修改邮箱请求是否合法。当前支持通过**邮箱验证码**的方式进行验证,你需要先调用发送邮件接口发送对应的邮件验证码。 **/ - public VerifyUpdateEmailRequestRespDto verifyUpdateEmailRequest(VerifyUpdateEmailRequestDto reqDto) { + public VerifyUpdateEmailRequestRespDto verifyUpdateEmailRequest( + VerifyUpdateEmailRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/verify-update-email-request"); config.setBody(reqDto); @@ -1422,7 +1494,8 @@ public VerifyUpdateEmailRequestRespDto verifyUpdateEmailRequest(VerifyUpdateEmai /** * @summary 修改邮箱 - * @description 终端用户自主修改邮箱,需要提供相应的验证手段,见[发起修改邮箱的验证请求](#tag/用户资料/修改邮箱/operation/ProfileV3Controller_updateEmailVerification)。 + * @description + * 终端用户自主修改邮箱,需要提供相应的验证手段,见[发起修改邮箱的验证请求](#tag/用户资料/修改邮箱/operation/ProfileV3Controller_updateEmailVerification)。 * 此参数需要提供一次性临时凭证 `updateEmailToken`,此数据需要从**发起修改邮箱的验证请求**接口获取。 **/ public CommonResponseDto updateEmail(UpdateEmailDto reqDto) { @@ -1436,9 +1509,11 @@ public CommonResponseDto updateEmail(UpdateEmailDto reqDto) { /** * @summary 发起修改手机号的验证请求 - * @description 终端用户自主修改手机号时,需要提供相应的验证手段。此接口用于验证用户的修改手机号请求是否合法。当前支持通过**短信验证码**的方式进行验证,你需要先调用发送短信接口发送对应的短信验证码。 + * @description + * 终端用户自主修改手机号时,需要提供相应的验证手段。此接口用于验证用户的修改手机号请求是否合法。当前支持通过**短信验证码**的方式进行验证,你需要先调用发送短信接口发送对应的短信验证码。 **/ - public VerifyUpdatePhoneRequestRespDto verifyUpdatePhoneRequest(VerifyUpdatePhoneRequestDto reqDto) { + public VerifyUpdatePhoneRequestRespDto verifyUpdatePhoneRequest( + VerifyUpdatePhoneRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/verify-update-phone-request"); config.setBody(reqDto); @@ -1449,7 +1524,8 @@ public VerifyUpdatePhoneRequestRespDto verifyUpdatePhoneRequest(VerifyUpdatePhon /** * @summary 修改手机号 - * @description 终端用户自主修改手机号,需要提供相应的验证手段,见[发起修改手机号的验证请求](#tag/用户资料/修改邮箱/operation/ProfileV3Controller_updatePhoneVerification)。 + * @description + * 终端用户自主修改手机号,需要提供相应的验证手段,见[发起修改手机号的验证请求](#tag/用户资料/修改邮箱/operation/ProfileV3Controller_updatePhoneVerification)。 * 此参数需要提供一次性临时凭证 `updatePhoneToken`,此数据需要从**发起修改手机号的验证请求**接口获取。 **/ public CommonResponseDto updatePhone(UpdatePhoneDto reqDto) { @@ -1465,7 +1541,8 @@ public CommonResponseDto updatePhone(UpdatePhoneDto reqDto) { * @summary 发起忘记密码请求 * @description 当用户忘记密码时,可以通过此端点找回密码。用户需要使用相关验证手段进行验证,目前支持**邮箱验证码**和**手机号验证码**两种验证手段。 **/ - public PasswordResetVerifyResp verifyResetPasswordRequest(VerifyResetPasswordRequestDto reqDto) { + public PasswordResetVerifyResp verifyResetPasswordRequest( + VerifyResetPasswordRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/verify-reset-password-request"); config.setBody(reqDto); @@ -1476,7 +1553,8 @@ public PasswordResetVerifyResp verifyResetPasswordRequest(VerifyResetPasswordReq /** * @summary 忘记密码 - * @description 此端点用于用户忘记密码之后,通过**手机号验证码**或者**邮箱验证码**的方式重置密码。此接口需要提供用于重置密码的临时凭证 `passwordResetToken`,此参数需要通过**发起忘记密码请求**接口获取。 + * @description 此端点用于用户忘记密码之后,通过**手机号验证码**或者**邮箱验证码**的方式重置密码。此接口需要提供用于重置密码的临时凭证 + * `passwordResetToken`,此参数需要通过**发起忘记密码请求**接口获取。 **/ public IsSuccessRespDto resetPassword(ResetPasswordDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1491,7 +1569,8 @@ public IsSuccessRespDto resetPassword(ResetPasswordDto reqDto) { * @summary 发起注销账号请求 * @description 当用户希望注销账号时,需提供相应凭证,当前支持**使用邮箱验证码**、使用**手机验证码**、**使用密码**三种验证方式。 **/ - public VerifyDeleteAccountRequestRespDto verifyDeleteAccountRequest(VerifyDeleteAccountRequestDto reqDto) { + public VerifyDeleteAccountRequestRespDto verifyDeleteAccountRequest( + VerifyDeleteAccountRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/verify-delete-account-request"); config.setBody(reqDto); @@ -1554,9 +1633,12 @@ public PreCheckCodeRespDto preCheckCode(PreCheckCodeDto reqDto) { /** * @summary 发起绑定 MFA 认证要素请求 - * @description 当用户未绑定某个 MFA 认证要素时,可以发起绑定 MFA 认证要素请求。不同类型的 MFA 认证要素绑定请求需要发送不同的参数,详细见 profile 参数。发起验证请求之后,Authing 服务器会根据相应的认证要素类型和传递的参数,使用不同的手段要求验证。此接口会返回 enrollmentToken,你需要在请求「绑定 MFA 认证要素」接口时带上此 enrollmentToken,并提供相应的凭证。 + * @description 当用户未绑定某个 MFA 认证要素时,可以发起绑定 MFA 认证要素请求。不同类型的 MFA 认证要素绑定请求需要发送不同的参数,详细见 profile + * 参数。发起验证请求之后,Authing 服务器会根据相应的认证要素类型和传递的参数,使用不同的手段要求验证。此接口会返回 enrollmentToken,你需要在请求「绑定 MFA + * 认证要素」接口时带上此 enrollmentToken,并提供相应的凭证。 **/ - public SendEnrollFactorRequestRespDto sendEnrollFactorRequest(SendEnrollFactorRequestDto reqDto) { + public SendEnrollFactorRequestRespDto sendEnrollFactorRequest( + SendEnrollFactorRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/send-enroll-factor-request"); config.setBody(reqDto); @@ -1593,7 +1675,8 @@ public ResetFactorRespDto resetFactor(ResetFactorDto reqDto) { /** * @summary 获取绑定的所有 MFA 认证要素 - * @description Authing 目前支持四种类型的 MFA 认证要素:手机短信、邮件验证码、OTP、人脸。如果用户绑定了手机号 / 邮箱之后,默认就具备了手机短信、邮箱验证码的 MFA 认证要素。 + * @description Authing 目前支持四种类型的 MFA 认证要素:手机短信、邮件验证码、OTP、人脸。如果用户绑定了手机号 / 邮箱之后,默认就具备了手机短信、邮箱验证码的 + * MFA 认证要素。 **/ public ListEnrolledFactorsRespDto listEnrolledFactors() { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1662,34 +1745,21 @@ public CommonResponseDto unlinkExtIdp(UnlinkExtIdpDto reqDto) { * 用户会建立一条与此外部身份源之间的关联关系。此接口用于获取此用户绑定的所有外部身份源。 *

* 取决于外部身份源的具体实现,一个用户在外部身份源中,可能会有多个身份 ID,比如在微信体系中会有 `openid` 和 `unionid`,在非书中有 - * `open_id`、`union_id` 和 `user_id`。在 Authing 中,我们把这样的一条 `open_id` 或者 `unionid_` 叫做一条 `Identity`, 所以用户在一个身份源会有多条 `Identity` 记录。 + * `open_id`、`union_id` 和 `user_id`。在 Authing 中,我们把这样的一条 `open_id` 或者 `unionid_` 叫做一条 + * `Identity`, 所以用户在一个身份源会有多条 `Identity` 记录。 *

* 以微信为例,如果用户使用微信登录或者绑定了微信账号,他的 `Identity` 信息如下所示: *

- * ```json - * [ - * { - * "identityId": "62f20932xxxxbcc10d966ee5", - * "extIdpId": "62f209327xxxxcc10d966ee5", - * "provider": "wechat", - * "type": "openid", - * "userIdInIdp": "oH_5k5SflrwjGvk7wqpoBKq_cc6M", - * "originConnIds": ["62f2093244fa5cb19ff21ed3"] - * }, - * { - * "identityId": "62f726239xxxxe3285d21c93", - * "extIdpId": "62f209327xxxxcc10d966ee5", - * "provider": "wechat", - * "type": "unionid", - * "userIdInIdp": "o9Nka5ibU-lUGQaeAHqu0nOZyJg0", - * "originConnIds": ["62f2093244fa5cb19ff21ed3"] - * } - * ] - * ``` + * ```json [ { "identityId": "62f20932xxxxbcc10d966ee5", "extIdpId": "62f209327xxxxcc10d966ee5", + * "provider": "wechat", "type": "openid", "userIdInIdp": "oH_5k5SflrwjGvk7wqpoBKq_cc6M", + * "originConnIds": ["62f2093244fa5cb19ff21ed3"] }, { "identityId": "62f726239xxxxe3285d21c93", + * "extIdpId": "62f209327xxxxcc10d966ee5", "provider": "wechat", "type": "unionid", + * "userIdInIdp": "o9Nka5ibU-lUGQaeAHqu0nOZyJg0", "originConnIds": ["62f2093244fa5cb19ff21ed3"] + * } ] ``` *

*

- * 可以看到他们的 `extIdpId` 是一样的,这个是你在 Authing 中创建的**身份源 ID**;`provider` 都是 `wechat`; - * 通过 `type` 可以区分出哪个是 `openid`,哪个是 `unionid`,以及具体的值(`userIdInIdp`);他们都来自于同一个身份源连接(`originConnIds`)。 + * 可以看到他们的 `extIdpId` 是一样的,这个是你在 Authing 中创建的**身份源 ID**;`provider` 都是 `wechat`; 通过 `type` + * 可以区分出哪个是 `openid`,哪个是 `unionid`,以及具体的值(`userIdInIdp`);他们都来自于同一个身份源连接(`originConnIds`)。 **/ public GetIdentitiesRespDto getIdentities() { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1717,8 +1787,8 @@ public GetExtIdpsRespDto getApplicationEnabledExtIdps() { * @summary 注册 * @description 此端点目前支持以下几种基于的注册方式: *

- * 1. 基于密码(PASSWORD):用户名 + 密码,邮箱 + 密码。 - * 2. 基于一次性临时验证码(PASSCODE):手机号 + 验证码,邮箱 + 验证码。你需要先调用发送短信或者发送邮件接口获取验证码。 + * 1. 基于密码(PASSWORD):用户名 + 密码,邮箱 + 密码。 2. 基于一次性临时验证码(PASSCODE):手机号 + 验证码,邮箱 + + * 验证码。你需要先调用发送短信或者发送邮件接口获取验证码。 *

* 社会化登录等使用外部身份源“注册”请直接使用**登录**接口,我们会在其第一次登录的时候为其创建一个新账号。 **/ @@ -1733,8 +1803,10 @@ public UserSingleRespDto signUp(SignUpDto reqDto) { /** * @summary 解密微信小程序数据 + * @description 解密微信小程序数据 **/ - public DecryptWechatMiniProgramDataRespDto decryptWechatMiniProgramData(DecryptWechatMiniProgramDataDto reqDto) { + public DecryptWechatMiniProgramDataRespDto decryptWechatMiniProgramData( + DecryptWechatMiniProgramDataDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/decrypt-wechat-miniprogram-data"); config.setBody(reqDto); @@ -1744,19 +1816,8 @@ public DecryptWechatMiniProgramDataRespDto decryptWechatMiniProgramData(DecryptW } /** - * @summary 获取小程序的手机号 - **/ - public GetWechatMiniProgramPhoneRespDto getWechatMiniprogramPhone(GetWechatMiniProgramPhoneDto reqDto) { - AuthingRequestConfig config = new AuthingRequestConfig(); - config.setUrl("/api/v3/get-wechat-miniprogram-phone"); - config.setBody(reqDto); - config.setMethod("POST"); - String response = request(config); - return deserialize(response, GetWechatMiniProgramPhoneRespDto.class); - } - - /** - * @summary 获取 Authing 服务器缓存的微信小程序、公众号 Access Token + * @summary 获取微信小程序、公众号 Access Token + * @description 获取 Authing 服务器缓存的微信小程序、公众号 Access Token **/ public GetWechatAccessTokenRespDto getWechatMpAccessToken(GetWechatAccessTokenDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1862,7 +1923,8 @@ public UserDepartmentPaginatedRespDto getDepartmentList(GetMyDepartmentListDto r * @summary 获取被授权的资源列表 * @description 此接口用于获取用户被授权的资源列表。 **/ - public AuthorizedResourcePaginatedRespDto getAuthorizedResources(GetMyAuthorizedResourcesDto reqDto) { + public AuthorizedResourcePaginatedRespDto getAuthorizedResources( + GetMyAuthorizedResourcesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-my-authorized-resources"); config.setBody(reqDto); diff --git a/src/main/java/cn/authing/sdk/java/client/ManagementClient.java b/src/main/java/cn/authing/sdk/java/client/ManagementClient.java index 0ab9d8f6..fdf18431 100644 --- a/src/main/java/cn/authing/sdk/java/client/ManagementClient.java +++ b/src/main/java/cn/authing/sdk/java/client/ManagementClient.java @@ -5,7 +5,6 @@ import cn.authing.sdk.java.model.AuthingRequestConfig; import cn.authing.sdk.java.model.ManagementClientOptions; - import java.util.HashMap; import java.util.Collections; import java.util.Map; @@ -39,19 +38,10 @@ public Object makeRequest(MakeRequestReqDto reqDto) { *

* ### 模糊搜素示例 *

- * 模糊搜索默认会从 `phone`, `email`, `name`, `username`, `nickname` 五个字段对用户进行模糊搜索,你也可以通过设置 `options.fuzzySearchOn` - * 决定模糊匹配的字段范围: + * 模糊搜索默认会从 `phone`, `email`, `name`, `username`, `nickname` 五个字段对用户进行模糊搜索,你也可以通过设置 + * `options.fuzzySearchOn` 决定模糊匹配的字段范围: *

- * ```json - * { - * "keywords": "北京", - * "options": { - * "fuzzySearchOn": [ - * "address" - * ] - * } - * } - * ``` + * ```json { "keywords": "北京", "options": { "fuzzySearchOn": [ "address" ] } } ``` *

* ### 高级搜索示例 *

@@ -62,150 +52,58 @@ public Object makeRequest(MakeRequestReqDto reqDto) { *

* 用户状态(`status`)为字符串类型,可选值为 `Activated` 和 `Suspended`: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "status", - * "operator": "EQUAL", - * "value": "Suspended" - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "status", "operator": "EQUAL", "value": "Suspended" + * } ] } ``` *

* #### 筛选邮箱中包含 `@example.com` 的用户 *

* 用户邮箱(`email`)为字符串类型,可以进行模糊搜索: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "email", - * "operator": "CONTAINS", - * "value": "@example.com" - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "email", "operator": "CONTAINS", "value": + * "@example.com" } ] } ``` *

* #### 根据用户的任意扩展字段进行搜索 *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "some-custom-key", - * "operator": "EQUAL", - * "value": "some-value" - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "some-custom-key", "operator": "EQUAL", "value": + * "some-value" } ] } ``` *

* #### 根据用户登录次数筛选 *

* 筛选登录次数大于 10 的用户: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "loginsCount", - * "operator": "GREATER", - * "value": 10 - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "loginsCount", "operator": "GREATER", "value": 10 } + * ] } ``` *

* 筛选登录次数在 10 - 100 次的用户: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "loginsCount", - * "operator": "BETWEEN", - * "value": [10, 100] - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "loginsCount", "operator": "BETWEEN", "value": [10, + * 100] } ] } ``` *

* #### 根据用户上次登录时间进行筛选 *

* 筛选最近 7 天内登录过的用户: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "lastLoginTime", - * "operator": "GREATER", - * "value": new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "lastLoginTime", "operator": "GREATER", "value": new + * Date(Date.now() - 7 * 24 * 60 * 60 * 1000) } ] } ``` *

* 筛选在某一段时间内登录过的用户: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "lastLoginTime", - * "operator": "BETWEEN", - * "value": [ - * new Date(Date.now() - 14 * 24 * 60 * 60 * 1000), - * new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) - * ] - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "lastLoginTime", "operator": "BETWEEN", "value": [ + * new Date(Date.now() - 14 * 24 * 60 * 60 * 1000), new Date(Date.now() - 7 * 24 * 60 * 60 * + * 1000) ] } ] } ``` *

* #### 根据用户曾经登录过的应用筛选 *

* 筛选出曾经登录过应用 `appId1` 或者 `appId2` 的用户: *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "loggedInApps", - * "operator": "IN", - * "value": [ - * "appId1", - * "appId2" - * ] - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "loggedInApps", "operator": "IN", "value": [ + * "appId1", "appId2" ] } ] } ``` *

* #### 根据用户所在部门进行筛选 *

- * ```json - * { - * "advancedFilter": [ - * { - * "field": "department", - * "operator": "IN", - * "value": [ - * { - * "organizationCode": "steamory", - * "departmentId": "root", - * "departmentIdType": "department_id", - * "includeChildrenDepartments": true - * } - * ] - * } - * ] - * } - * ``` + * ```json { "advancedFilter": [ { "field": "department", "operator": "IN", "value": [ { + * "organizationCode": "steamory", "departmentId": "root", "departmentIdType": "department_id", + * "includeChildrenDepartments": true } ] } ] } ``` **/ public UserPaginatedRespDto listUsers(ListUsersRequestDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -258,7 +156,8 @@ public UserListRespDto getUserBatch(GetUserBatchDto reqDto) { /** * @summary 创建用户 - * @description 创建用户,邮箱、手机号、用户名必须包含其中一个,邮箱、手机号、用户名、externalId 用户池内唯一,此接口将以管理员身份创建用户因此不需要进行手机号验证码检验等安全检测。 + * @description 创建用户,邮箱、手机号、用户名必须包含其中一个,邮箱、手机号、用户名、externalId + * 用户池内唯一,此接口将以管理员身份创建用户因此不需要进行手机号验证码检验等安全检测。 **/ public UserSingleRespDto createUser(CreateUserReqDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -271,7 +170,8 @@ public UserSingleRespDto createUser(CreateUserReqDto reqDto) { /** * @summary 批量创建用户 - * @description 批量创建用户,邮箱、手机号、用户名必须包含其中一个,邮箱、手机号、用户名、externalId 用户池内唯一,此接口将以管理员身份创建用户因此不需要进行手机号验证码检验等安全检测。 + * @description 批量创建用户,邮箱、手机号、用户名必须包含其中一个,邮箱、手机号、用户名、externalId + * 用户池内唯一,此接口将以管理员身份创建用户因此不需要进行手机号验证码检验等安全检测。 **/ public UserListRespDto createUsersBatch(CreateUserBatchReqDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -284,7 +184,8 @@ public UserListRespDto createUsersBatch(CreateUserBatchReqDto reqDto) { /** * @summary 修改用户资料 - * @description 通过用户 ID,修改用户资料,邮箱、手机号、用户名、externalId 用户池内唯一,此接口将以管理员身份修改用户资料因此不需要进行手机号验证码检验等安全检测。 + * @description 通过用户 ID,修改用户资料,邮箱、手机号、用户名、externalId + * 用户池内唯一,此接口将以管理员身份修改用户资料因此不需要进行手机号验证码检验等安全检测。 **/ public UserSingleRespDto updateUser(UpdateUserReqDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -351,7 +252,8 @@ public RolePaginatedRespDto getUserRoles(GetUserRolesDto reqDto) { * @summary 获取用户实名认证信息 * @description 通过用户 ID,获取用户实名认证信息,可以选择指定用户 ID 类型。 **/ - public PrincipalAuthenticationInfoPaginatedRespDto getUserPrincipalAuthenticationInfo(GetUserPrincipalAuthenticationInfoDto reqDto) { + public PrincipalAuthenticationInfoPaginatedRespDto getUserPrincipalAuthenticationInfo( + GetUserPrincipalAuthenticationInfoDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-user-principal-authentication-info"); config.setBody(reqDto); @@ -364,7 +266,8 @@ public PrincipalAuthenticationInfoPaginatedRespDto getUserPrincipalAuthenticatio * @summary 删除用户实名认证信息 * @description 通过用户 ID,删除用户实名认证信息,可以选择指定用户 ID 类型等。 **/ - public IsSuccessRespDto resetUserPrincipalAuthenticationInfo(ResetUserPrincipalAuthenticationInfoDto reqDto) { + public IsSuccessRespDto resetUserPrincipalAuthenticationInfo( + ResetUserPrincipalAuthenticationInfoDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/reset-user-principal-authentication-info"); config.setBody(reqDto); @@ -533,7 +436,8 @@ public UserLoggedInAppsListRespDto getUserLoggedinApps(GetUserLoggedinAppsDto re * @summary 获取用户曾经登录过的身份源 * @description 通过用户 ID,获取用户曾经登录过的身份源,可以选择指定用户 ID 类型等。 **/ - public UserLoggedInIdentitiesRespDto getUserLoggedinIdentities(GetUserLoggedInIdentitiesDto reqDto) { + public UserLoggedInIdentitiesRespDto getUserLoggedinIdentities( + GetUserLoggedInIdentitiesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-user-logged-in-identities"); config.setBody(reqDto); @@ -570,9 +474,11 @@ public ResignUserRespDto resignUserBatch(ResignUserBatchReqDto reqDto) { /** * @summary 获取用户被授权的所有资源 - * @description 通过用户 ID,获取用户被授权的所有资源,可以选择指定用户 ID 类型等,用户被授权的资源是用户自身被授予、通过分组继承、通过角色继承、通过组织机构继承的集合。 + * @description 通过用户 ID,获取用户被授权的所有资源,可以选择指定用户 ID + * 类型等,用户被授权的资源是用户自身被授予、通过分组继承、通过角色继承、通过组织机构继承的集合。 **/ - public AuthorizedResourcePaginatedRespDto getUserAuthorizedResources(GetUserAuthorizedResourcesDto reqDto) { + public AuthorizedResourcePaginatedRespDto getUserAuthorizedResources( + GetUserAuthorizedResourcesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-user-authorized-resources"); config.setBody(reqDto); @@ -988,7 +894,8 @@ public UserPaginatedRespDto listGroupMembers(ListGroupMembersDto reqDto) { * @summary 获取分组被授权的资源列表 * @description 通过分组 code,获取分组被授权的资源列表,可以通过资源类型、权限分组 code 筛选。 **/ - public AuthorizedResourceListRespDto getGroupAuthorizedResources(GetGroupAuthorizedResourcesDto reqDto) { + public AuthorizedResourceListRespDto getGroupAuthorizedResources( + GetGroupAuthorizedResourcesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-group-authorized-resources"); config.setBody(reqDto); @@ -1040,7 +947,8 @@ public IsSuccessRespDto revokeRole(RevokeRoleDto reqDto) { * @summary 获取角色被授权的资源列表 * @description 通过权限分组内角色 code,获取角色被授权的资源列表。 **/ - public RoleAuthorizedResourcePaginatedRespDto getRoleAuthorizedResources(GetRoleAuthorizedResourcesDto reqDto) { + public RoleAuthorizedResourcePaginatedRespDto getRoleAuthorizedResources( + GetRoleAuthorizedResourcesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-role-authorized-resources"); config.setBody(reqDto); @@ -1261,7 +1169,8 @@ public IsSuccessRespDto changeExtIdpConnState(ChangeExtIdpConnStateDto reqDto) { * @summary 租户关联身份源 * @description 租户可以关联或取消关联身份源连接。 **/ - public IsSuccessRespDto changeExtIdpConnAssociationState(ChangeExtIdpAssociationStateDto reqDto) { + public IsSuccessRespDto changeExtIdpConnAssociationState( + ChangeExtIdpAssociationStateDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/change-ext-idp-conn-association-state"); config.setBody(reqDto); @@ -1599,7 +1508,8 @@ public IsSuccessRespDto authorizeResources(AuthorizeResourcesDto reqDto) { * @summary 获取某个主体被授权的资源列表 * @description 根据筛选条件,获取某个主体被授权的资源列表。 **/ - public AuthorizedResourcePaginatedRespDto getAuthorizedResources(GetAuthorizedResourcesDto reqDto) { + public AuthorizedResourcePaginatedRespDto getAuthorizedResources( + GetAuthorizedResourcesDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-authorized-resources"); config.setBody(reqDto); @@ -1625,7 +1535,8 @@ public IsActionAllowedRespDtp isActionAllowed(IsActionAllowedDto reqDto) { * @summary 获取资源被授权的主体 * @description 获取资源被授权的主体 **/ - public GetResourceAuthorizedTargetRespDto getResourceAuthorizedTargets(GetResourceAuthorizedTargetsDto reqDto) { + public GetResourceAuthorizedTargetRespDto getResourceAuthorizedTargets( + GetResourceAuthorizedTargetsDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-resource-authorized-targets"); config.setBody(reqDto); @@ -1742,7 +1653,8 @@ public TriggerSyncTaskRespDto listSyncJobLogs(ListSyncJobLogsDto reqDto) { * @summary 获取同步风险操作列表 * @description 获取同步风险操作列表 **/ - public SyncRiskOperationPaginatedRespDto listSyncRiskOperations(ListSyncRiskOperationsDto reqDto) { + public SyncRiskOperationPaginatedRespDto listSyncRiskOperations( + ListSyncRiskOperationsDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/list-sync-risk-operations"); config.setBody(reqDto); @@ -1755,7 +1667,8 @@ public SyncRiskOperationPaginatedRespDto listSyncRiskOperations(ListSyncRiskOper * @summary 执行同步风险操作 * @description 执行同步风险操作 **/ - public TriggerSyncRiskOperationsRespDto triggerSyncRiskOperations(TriggerSyncRiskOperationDto reqDto) { + public TriggerSyncRiskOperationsRespDto triggerSyncRiskOperations( + TriggerSyncRiskOperationDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/trigger-sync-risk-operations"); config.setBody(reqDto); @@ -1768,7 +1681,8 @@ public TriggerSyncRiskOperationsRespDto triggerSyncRiskOperations(TriggerSyncRis * @summary 取消同步风险操作 * @description 取消同步风险操作 **/ - public CancelSyncRiskOperationsRespDto cancelSyncRiskOperation(CancelSyncRiskOperationDto reqDto) { + public CancelSyncRiskOperationsRespDto cancelSyncRiskOperation( + CancelSyncRiskOperationDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/cancel-sync-risk-operation"); config.setBody(reqDto); @@ -1779,7 +1693,7 @@ public CancelSyncRiskOperationsRespDto cancelSyncRiskOperation(CancelSyncRiskOpe /** * @summary 获取用户行为日志 - * @description 可以选择请求 ID、客户端 IP、用户 ID、应用 ID、开始时间戳、请求是否成功、分页参数去获取用户行为日志 + * @description 可以选择请求 ID、客户端 IP、用户 ID、应用 ID、开始时间戳、请求是否成功、分页参数来获取用户行为日志 **/ public UserActionLogRespDto getUserActionLogs(GetUserActionLogsDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -1898,7 +1812,8 @@ public ApplicationPaginatedRespDto listApplications(ListApplicationsDto reqDto) * @summary 获取应用简单信息 * @description 通过应用 ID,获取应用简单信息。 **/ - public ApplicationSimpleInfoSingleRespDto getApplicationSimpleInfo(GetApplicationSimpleInfoDto reqDto) { + public ApplicationSimpleInfoSingleRespDto getApplicationSimpleInfo( + GetApplicationSimpleInfoDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-application-simple-info"); config.setBody(reqDto); @@ -1911,7 +1826,8 @@ public ApplicationSimpleInfoSingleRespDto getApplicationSimpleInfo(GetApplicatio * @summary 获取应用简单信息列表 * @description 获取应用简单信息列表 **/ - public ApplicationSimpleInfoPaginatedRespDto listApplicationSimpleInfo(ListApplicationSimpleInfoDto reqDto) { + public ApplicationSimpleInfoPaginatedRespDto listApplicationSimpleInfo( + ListApplicationSimpleInfoDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/list-application-simple-info"); config.setBody(reqDto); @@ -1963,7 +1879,8 @@ public GetApplicationSecretRespDto getApplicationSecret(GetApplicationSecretDto * @summary 刷新应用密钥 * @description 刷新应用密钥 **/ - public RefreshApplicationSecretRespDto refreshApplicationSecret(RefreshApplicationSecretDto reqDto) { + public RefreshApplicationSecretRespDto refreshApplicationSecret( + RefreshApplicationSecretDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/refresh-application-secret"); config.setBody(reqDto); @@ -1989,7 +1906,8 @@ public UserPaginatedRespDto listApplicationActiveUsers(ListApplicationActiveUser * @summary 获取应用默认访问授权策略 * @description 获取应用默认访问授权策略 **/ - public GetApplicationPermissionStrategyRespDto getApplicationPermissionStrategy(GetApplicationPermissionStrategyDto reqDto) { + public GetApplicationPermissionStrategyRespDto getApplicationPermissionStrategy( + GetApplicationPermissionStrategyDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-application-permission-strategy"); config.setBody(reqDto); @@ -2002,7 +1920,8 @@ public GetApplicationPermissionStrategyRespDto getApplicationPermissionStrategy( * @summary 更新应用默认访问授权策略 * @description 更新应用默认访问授权策略 **/ - public IsSuccessRespDto updateApplicationPermissionStrategy(UpdateApplicationPermissionStrategyDataDto reqDto) { + public IsSuccessRespDto updateApplicationPermissionStrategy( + UpdateApplicationPermissionStrategyDataDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/update-application-permission-strategy"); config.setBody(reqDto); @@ -2065,7 +1984,9 @@ public SecuritySettingsRespDto getSecuritySettings() { /** * @summary 修改安全配置 - * @description 可选安全域、Authing Token 有效时间(秒)、验证码长度、验证码尝试次数、用户修改邮箱的安全策略、用户修改手机号的安全策略、Cookie 过期时间设置、是否禁止用户注册、频繁注册检测配置、验证码注册后是否要求用户设置密码、未验证的邮箱登录时是否禁止登录并发送认证邮件、用户自助解锁配置、Authing 登录页面是否开启登录账号选择、APP 扫码登录安全配置进行修改安全配置 + * @description 可选安全域、Authing Token 有效时间(秒)、验证码长度、验证码尝试次数、用户修改邮箱的安全策略、用户修改手机号的安全策略、Cookie + * 过期时间设置、是否禁止用户注册、频繁注册检测配置、验证码注册后是否要求用户设置密码、未验证的邮箱登录时是否禁止登录并发送认证邮件、用户自助解锁配置、Authing + * 登录页面是否开启登录账号选择、APP 扫码登录安全配置进行修改安全配置 **/ public SecuritySettingsRespDto updateSecuritySettings(UpdateSecuritySettingsDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -2132,7 +2053,8 @@ public CostGetCurrentUsageRespDto getUsageInfo() { * @summary 获取 MAU 使用记录 * @description 获取当前用户池 MAU 使用记录 **/ - public CostGetMauPeriodUsageHistoryRespDto getMauPeriodUsageHistory(GetMauPeriodUsageHistoryDto reqDto) { + public CostGetMauPeriodUsageHistoryRespDto getMauPeriodUsageHistory( + GetMauPeriodUsageHistoryDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/get-mau-period-usage-history"); config.setBody(reqDto); @@ -2223,7 +2145,8 @@ public PipelineFunctionSingleRespDto getPipelineFunction(GetPipelineFunctionDto * @summary 重新上传 Pipeline 函数 * @description 当 Pipeline 函数上传失败时,重新上传 Pipeline 函数 **/ - public PipelineFunctionSingleRespDto reuploadPipelineFunction(ReUploadPipelineFunctionDto reqDto) { + public PipelineFunctionSingleRespDto reuploadPipelineFunction( + ReUploadPipelineFunctionDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); config.setUrl("/api/v3/reupload-pipeline-function"); config.setBody(reqDto); @@ -2299,7 +2222,7 @@ public PipelineFunctionPaginatedRespDto getPipelineLogs(GetPipelineLogsDto reqDt /** * @summary 创建 Webhook - * @description 你需要指定 Webhoook 名称、Webhook 回调地址、请求数据格式、用户真实名称来创建 Webhook。还可选是否启用、请求密钥进行创建 + * @description 你需要指定 Webhook 名称、Webhook 回调地址、请求数据格式、用户真实名称来创建 Webhook。还可选是否启用、请求密钥进行创建 **/ public CreateWebhookRespDto createWebhook(CreateWebhookDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); @@ -2325,7 +2248,7 @@ public GetWebhooksRespDto listWebhooks(ListWebhooksDto reqDto) { /** * @summary 修改 Webhook 配置 - * @description 需要指定 webhookId,可选 Webhoook 名称、Webhook 回调地址、请求数据格式、用户真实名称、是否启用、请求密钥参数进行修改 webhook + * @description 需要指定 webhookId,可选 Webhook 名称、Webhook 回调地址、请求数据格式、用户真实名称、是否启用、请求密钥参数进行修改 webhook **/ public UpdateWebhooksRespDto updateWebhook(UpdateWebhookDto reqDto) { AuthingRequestConfig config = new AuthingRequestConfig(); diff --git a/src/main/java/cn/authing/sdk/java/dto/AdminAuditLogDto.java b/src/main/java/cn/authing/sdk/java/dto/AdminAuditLogDto.java index 512c8687..5fe16c6b 100644 --- a/src/main/java/cn/authing/sdk/java/dto/AdminAuditLogDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/AdminAuditLogDto.java @@ -44,7 +44,7 @@ public class AdminAuditLogDto { * */ @JsonProperty("operationType") - private String operationType; + private OperationType operationType; /** * 事件类型: * - `user`: 用户 @@ -69,7 +69,7 @@ public class AdminAuditLogDto { * */ @JsonProperty("resourceType") - private String resourceType; + private ResourceType resourceType; /** * 事件详情 */ @@ -149,17 +149,17 @@ public void setClientIp(String clientIp) { this.clientIp = clientIp; } - public String getOperationType() { + public OperationType getOperationType() { return operationType; } - public void setOperationType(String operationType) { + public void setOperationType(OperationType operationType) { this.operationType = operationType; } - public String getResourceType() { + public ResourceType getResourceType() { return resourceType; } - public void setResourceType(String resourceType) { + public void setResourceType(ResourceType resourceType) { this.resourceType = resourceType; } @@ -233,4 +233,181 @@ public void setRequestId(String requestId) { this.requestId = requestId; } + + /** + * 操作类型: + * - `create`: 创建 + * - `delete`: 删除 + * - `import`: 导入 + * - `export`: 导出 + * - `update`: 修改 + * - `refresh`: 刷新 + * - `sync`: 同步 + * - `invite`: 邀请 + * - `resign`: 离职 + * - `recover`: 恢复 + * - `disable`: 禁用 + * - `userEnable`: 启用 + * + */ + public static enum OperationType { + + @JsonProperty("all") + ALL("all"), + + @JsonProperty("create") + CREATE("create"), + + @JsonProperty("delete") + DELETE("delete"), + + @JsonProperty("import") + IMPORT("import"), + + @JsonProperty("export") + EXPORT("export"), + + @JsonProperty("update") + UPDATE("update"), + + @JsonProperty("refresh") + REFRESH("refresh"), + + @JsonProperty("sync") + SYNC("sync"), + + @JsonProperty("invite") + INVITE("invite"), + + @JsonProperty("resign") + RESIGN("resign"), + + @JsonProperty("recover") + RECOVER("recover"), + + @JsonProperty("disable") + DISABLE("disable"), + + @JsonProperty("userEnable") + USER_ENABLE("userEnable"), + + @JsonProperty("activate") + ACTIVATE("activate"), + + @JsonProperty("deactivate") + DEACTIVATE("deactivate"), + ; + + private String value; + + OperationType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + /** + * 事件类型: + * - `user`: 用户 + * - `userpool`: 用户池 + * - `tenant`: 租户 + * - `userLoginState`: 用户登录态 + * - `userAccountState`: 用户账号状态 + * - `userGroup`: 用户分组 + * - `fieldEncryptState`: 字段加密状态 + * - `syncTask`: 同步任务 + * - `socialConnection`: 社会化身份源 + * - `enterpriseConnection`: 社会化身份源 + * - `customDatabase`: 自定义数据库 + * - `org`: 组织机构 + * - `cooperator`: 协作管理员 + * - `application`: 应用 + * - `resourceNamespace`: 权限分组 + * - `resource`: 资源 + * - `role`: 角色 + * - `roleAssign`: 角色授权 + * - `policy`: 策略 + * + */ + public static enum ResourceType { + + @JsonProperty("all") + ALL("all"), + + @JsonProperty("user") + USER("user"), + + @JsonProperty("userpool") + USERPOOL("userpool"), + + @JsonProperty("tenant") + TENANT("tenant"), + + @JsonProperty("userLoginState") + USER_LOGIN_STATE("userLoginState"), + + @JsonProperty("userAccountState") + USER_ACCOUNT_STATE("userAccountState"), + + @JsonProperty("userGroup") + USER_GROUP("userGroup"), + + @JsonProperty("fieldEncryptState") + FIELD_ENCRYPT_STATE("fieldEncryptState"), + + @JsonProperty("syncTask") + SYNC_TASK("syncTask"), + + @JsonProperty("socialConnection") + SOCIAL_CONNECTION("socialConnection"), + + @JsonProperty("enterpriseConnection") + ENTERPRISE_CONNECTION("enterpriseConnection"), + + @JsonProperty("customDatabase") + CUSTOM_DATABASE("customDatabase"), + + @JsonProperty("org") + ORG("org"), + + @JsonProperty("cooperator") + COOPERATOR("cooperator"), + + @JsonProperty("application") + APPLICATION("application"), + + @JsonProperty("resourceNamespace") + RESOURCE_NAMESPACE("resourceNamespace"), + + @JsonProperty("resource") + RESOURCE("resource"), + + @JsonProperty("role") + ROLE("role"), + + @JsonProperty("roleAssign") + ROLE_ASSIGN("roleAssign"), + + @JsonProperty("policy") + POLICY("policy"), + + @JsonProperty("customDomain") + CUSTOM_DOMAIN("customDomain"), + ; + + private String value; + + ResourceType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/CreateIdentityDto.java b/src/main/java/cn/authing/sdk/java/dto/CreateIdentityDto.java index 4c9caa77..fc7e391e 100644 --- a/src/main/java/cn/authing/sdk/java/dto/CreateIdentityDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/CreateIdentityDto.java @@ -53,6 +53,16 @@ public class CreateIdentityDto { */ @JsonProperty("userIdInIdp") private String userIdInIdp; + /** + * 在外部身份源中的 Access Token(此参数只会在用户主动获取时返回,管理侧接口不会返回)。 + */ + @JsonProperty("accessToken") + private String accessToken; + /** + * 在外部身份源中的 Refresh Token(此参数只会在用户主动获取时返回,管理侧接口不会返回)。 + */ + @JsonProperty("refreshToken") + private String refreshToken; /** * 身份来自的身份源连接 ID 列表 */ @@ -87,6 +97,20 @@ public void setUserIdInIdp(String userIdInIdp) { this.userIdInIdp = userIdInIdp; } + public String getAccessToken() { + return accessToken; + } + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getRefreshToken() { + return refreshToken; + } + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + public List getOriginConnIds() { return originConnIds; } diff --git a/src/main/java/cn/authing/sdk/java/dto/EmailTemplateDto.java b/src/main/java/cn/authing/sdk/java/dto/EmailTemplateDto.java index 81208691..7e9f96c5 100644 --- a/src/main/java/cn/authing/sdk/java/dto/EmailTemplateDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/EmailTemplateDto.java @@ -66,7 +66,7 @@ public class EmailTemplateDto { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ @JsonProperty("tplEngine") @@ -219,7 +219,7 @@ public String getValue() { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ public static enum TplEngine { diff --git a/src/main/java/cn/authing/sdk/java/dto/GetWechatMiniProgramPhoneDto.java b/src/main/java/cn/authing/sdk/java/dto/GetWechatMiniProgramPhoneDto.java index 22335224..f28133c8 100644 --- a/src/main/java/cn/authing/sdk/java/dto/GetWechatMiniProgramPhoneDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/GetWechatMiniProgramPhoneDto.java @@ -5,23 +5,16 @@ public class GetWechatMiniProgramPhoneDto { - /** - * `open-type=getphonecode` 接口返回的 `code` - */ - @JsonProperty("code") - private String code; /** * 微信小程序的外部身份源连接标志符 */ @JsonProperty("extIdpConnidentifier") private String extIdpConnidentifier; - - public String getCode() { - return code; - } - public void setCode(String code) { - this.code = code; - } + /** + * `open-type=getphonecode` 接口返回的 `code` + */ + @JsonProperty("code") + private String code; public String getExtIdpConnidentifier() { return extIdpConnidentifier; @@ -30,6 +23,13 @@ public void setExtIdpConnidentifier(String extIdpConnidentifier) { this.extIdpConnidentifier = extIdpConnidentifier; } + public String getCode() { + return code; + } + public void setCode(String code) { + this.code = code; + } + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/IdentityDto.java b/src/main/java/cn/authing/sdk/java/dto/IdentityDto.java index 15b48299..37152c20 100644 --- a/src/main/java/cn/authing/sdk/java/dto/IdentityDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/IdentityDto.java @@ -58,6 +58,16 @@ public class IdentityDto { */ @JsonProperty("userIdInIdp") private String userIdInIdp; + /** + * 在外部身份源中的 Access Token(此参数只会在用户主动获取时返回,管理侧接口不会返回)。 + */ + @JsonProperty("accessToken") + private String accessToken; + /** + * 在外部身份源中的 Refresh Token(此参数只会在用户主动获取时返回,管理侧接口不会返回)。 + */ + @JsonProperty("refreshToken") + private String refreshToken; /** * 身份来自的身份源连接 ID 列表 */ @@ -99,6 +109,20 @@ public void setUserIdInIdp(String userIdInIdp) { this.userIdInIdp = userIdInIdp; } + public String getAccessToken() { + return accessToken; + } + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getRefreshToken() { + return refreshToken; + } + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + public List getOriginConnIds() { return originConnIds; } diff --git a/src/main/java/cn/authing/sdk/java/dto/LoginAnomalyDetectionConfigDto.java b/src/main/java/cn/authing/sdk/java/dto/LoginAnomalyDetectionConfigDto.java index 791d1d33..0b36403d 100644 --- a/src/main/java/cn/authing/sdk/java/dto/LoginAnomalyDetectionConfigDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/LoginAnomalyDetectionConfigDto.java @@ -8,28 +8,62 @@ public class LoginAnomalyDetectionConfigDto { /** - * 登录安全策略。当用户触发登录失败频率检测时,采用什么策略。目前支持验证码和锁定账号两种策略。当选择账号锁定策略的时候,只可以开启「登录密码错误限制」。 + * 登录安全策略。当用户触发登录失败频率检测时,采用什么策略。目前支持验证码和锁定账号两种策略。当选择账号锁定策略的时候,只可以开启「登录密码错误限制」。此字段标志为过时,但是此字段还是必传的,如果使用新版本逻辑可以默认写一个。新版本账号锁定使用 accountLock,验证码使用 robotVerify */ @JsonProperty("loginFailStrategy") - private String loginFailStrategy; + private LoginFailStrategy loginFailStrategy; + /** + * 人机验证(验证码)策略。可选值,disable(不开启)/condition_set(条件开启)/always_enable (始终开启) + */ + @JsonProperty("robotVerify") + private String robotVerify; + /** + * 账号锁定策略。可选值,disable(不开启)/condition_set(条件开启) + */ + @JsonProperty("accountLock") + private String accountLock; /** * 登录失败次数限制:当用户登录输入信息错误的时候会被按照「登录安全策略」规则触发相对应的策略。 */ @JsonProperty("loginFailCheck") private LoginFailCheckConfigDto loginFailCheck; /** - * 登录密码错误限制:当用户登录输入密码信息错误的时候会被按照「登录安全策略」规则触发相对应的策略。 + * 登录密码错误限制:当用户登录输入密码信息错误的时候会被按照「登录安全策略」规则触发相对应的策略。此字段被标志为过时,见 accountLockLoginPasswordFailCheck/ robotVerifyLoginPasswordFailCheck */ @JsonProperty("loginPasswordFailCheck") private LoginPassowrdFailCheckConfigDto loginPasswordFailCheck; + /** + * 账号锁定-登录密码错误限制:当用户登录输入密码信息错误的时候会被按照「登录安全策略」规则触发相对应的策略。 + */ + @JsonProperty("accountLockLoginPasswordFailCheck") + private LoginPassowrdFailCheckConfigDto accountLockLoginPasswordFailCheck; + /** + * 人机验证(验证码)-登录密码错误限制:当用户登录输入密码信息错误的时候会被按照「登录安全策略」规则触发相对应的策略。 + */ + @JsonProperty("robotVerifyLoginPasswordFailCheck") + private LoginPassowrdFailCheckConfigDto robotVerifyLoginPasswordFailCheck; - public String getLoginFailStrategy() { + public LoginFailStrategy getLoginFailStrategy() { return loginFailStrategy; } - public void setLoginFailStrategy(String loginFailStrategy) { + public void setLoginFailStrategy(LoginFailStrategy loginFailStrategy) { this.loginFailStrategy = loginFailStrategy; } + public String getRobotVerify() { + return robotVerify; + } + public void setRobotVerify(String robotVerify) { + this.robotVerify = robotVerify; + } + + public String getAccountLock() { + return accountLock; + } + public void setAccountLock(String accountLock) { + this.accountLock = accountLock; + } + public LoginFailCheckConfigDto getLoginFailCheck() { return loginFailCheck; } @@ -44,4 +78,43 @@ public void setLoginPasswordFailCheck(LoginPassowrdFailCheckConfigDto loginPassw this.loginPasswordFailCheck = loginPasswordFailCheck; } + public LoginPassowrdFailCheckConfigDto getAccountLockLoginPasswordFailCheck() { + return accountLockLoginPasswordFailCheck; + } + public void setAccountLockLoginPasswordFailCheck(LoginPassowrdFailCheckConfigDto accountLockLoginPasswordFailCheck) { + this.accountLockLoginPasswordFailCheck = accountLockLoginPasswordFailCheck; + } + + public LoginPassowrdFailCheckConfigDto getRobotVerifyLoginPasswordFailCheck() { + return robotVerifyLoginPasswordFailCheck; + } + public void setRobotVerifyLoginPasswordFailCheck(LoginPassowrdFailCheckConfigDto robotVerifyLoginPasswordFailCheck) { + this.robotVerifyLoginPasswordFailCheck = robotVerifyLoginPasswordFailCheck; + } + + + /** + * 登录安全策略。当用户触发登录失败频率检测时,采用什么策略。目前支持验证码和锁定账号两种策略。当选择账号锁定策略的时候,只可以开启「登录密码错误限制」。此字段标志为过时,但是此字段还是必传的,如果使用新版本逻辑可以默认写一个。新版本账号锁定使用 accountLock,验证码使用 robotVerify + */ + public static enum LoginFailStrategy { + + @JsonProperty("captcha") + CAPTCHA("captcha"), + + @JsonProperty("block-account") + BLOCK_ACCOUNT("block-account"), + ; + + private String value; + + LoginFailStrategy(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/LoginFailCheckConfigDto.java b/src/main/java/cn/authing/sdk/java/dto/LoginFailCheckConfigDto.java index 023da82e..0a673ab0 100644 --- a/src/main/java/cn/authing/sdk/java/dto/LoginFailCheckConfigDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/LoginFailCheckConfigDto.java @@ -20,6 +20,11 @@ public class LoginFailCheckConfigDto { */ @JsonProperty("timeInterval") private Integer timeInterval; + /** + * 时间长度单位。Second/Minute/Hour/Day,仅仅做显示,timeInterval的单位还是秒 + */ + @JsonProperty("unit") + private String unit; public Boolean getEnabled() { return enabled; @@ -42,6 +47,13 @@ public void setTimeInterval(Integer timeInterval) { this.timeInterval = timeInterval; } + public String getUnit() { + return unit; + } + public void setUnit(String unit) { + this.unit = unit; + } + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/LoginPassowrdFailCheckConfigDto.java b/src/main/java/cn/authing/sdk/java/dto/LoginPassowrdFailCheckConfigDto.java index 2004ce99..e5dc2b1b 100644 --- a/src/main/java/cn/authing/sdk/java/dto/LoginPassowrdFailCheckConfigDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/LoginPassowrdFailCheckConfigDto.java @@ -6,12 +6,12 @@ public class LoginPassowrdFailCheckConfigDto { /** - * 是否开启登录失败次数限制。 + * 是否开启登录密码错误限制 */ @JsonProperty("enabled") private Boolean enabled; /** - * 在一定时间周期内,对于同一个 IP,最多因为密码错误导致登录失败多少次后会触发安全策略。 + * 密码错误次数最大限制 */ @JsonProperty("limit") private Integer limit; @@ -20,6 +20,11 @@ public class LoginPassowrdFailCheckConfigDto { */ @JsonProperty("timeInterval") private Integer timeInterval; + /** + * 时间长度单位。Second/Minute/Hour/Day,仅仅做显示,timeInterval的单位还是秒 + */ + @JsonProperty("unit") + private String unit; public Boolean getEnabled() { return enabled; @@ -42,6 +47,13 @@ public void setTimeInterval(Integer timeInterval) { this.timeInterval = timeInterval; } + public String getUnit() { + return unit; + } + public void setUnit(String unit) { + this.unit = unit; + } + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/PreviewEmailTemplateDto.java b/src/main/java/cn/authing/sdk/java/dto/PreviewEmailTemplateDto.java index cfc232a3..a6223e33 100644 --- a/src/main/java/cn/authing/sdk/java/dto/PreviewEmailTemplateDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/PreviewEmailTemplateDto.java @@ -51,7 +51,7 @@ public class PreviewEmailTemplateDto { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ @JsonProperty("tplEngine") @@ -183,7 +183,7 @@ public String getValue() { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ public static enum TplEngine { diff --git a/src/main/java/cn/authing/sdk/java/dto/QrcodeLoginStrategyDto.java b/src/main/java/cn/authing/sdk/java/dto/QrcodeLoginStrategyDto.java index 1edd6a5d..c70deb6f 100644 --- a/src/main/java/cn/authing/sdk/java/dto/QrcodeLoginStrategyDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/QrcodeLoginStrategyDto.java @@ -6,15 +6,25 @@ public class QrcodeLoginStrategyDto { /** - * 二维码有效时间(秒) + * 二维码有效时间,单位秒 */ @JsonProperty("qrcodeExpiresIn") private Integer qrcodeExpiresIn; /** - * ticket 有效时间(秒) + * 时间长度单位,Second/Minute/Hour/Day,仅做显示用 + */ + @JsonProperty("qrcodeExpiresInUnit") + private String qrcodeExpiresInUnit; + /** + * ticket 有效时间,单位秒 */ @JsonProperty("ticketExpiresIn") private Integer ticketExpiresIn; + /** + * 时间长度单位,Second/Minute/Hour/Day,仅作显示用 + */ + @JsonProperty("ticketExpiresInUnit") + private String ticketExpiresInUnit; /** * Web 轮询接口返回完整用户信息,详情见此文档:Web 轮询接口返回完整用户信息 */ @@ -33,6 +43,13 @@ public void setQrcodeExpiresIn(Integer qrcodeExpiresIn) { this.qrcodeExpiresIn = qrcodeExpiresIn; } + public String getQrcodeExpiresInUnit() { + return qrcodeExpiresInUnit; + } + public void setQrcodeExpiresInUnit(String qrcodeExpiresInUnit) { + this.qrcodeExpiresInUnit = qrcodeExpiresInUnit; + } + public Integer getTicketExpiresIn() { return ticketExpiresIn; } @@ -40,6 +57,13 @@ public void setTicketExpiresIn(Integer ticketExpiresIn) { this.ticketExpiresIn = ticketExpiresIn; } + public String getTicketExpiresInUnit() { + return ticketExpiresInUnit; + } + public void setTicketExpiresInUnit(String ticketExpiresInUnit) { + this.ticketExpiresInUnit = ticketExpiresInUnit; + } + public Boolean getAllowExchangeUserInfoFromBrowser() { return allowExchangeUserInfoFromBrowser; } diff --git a/src/main/java/cn/authing/sdk/java/dto/SelfUnlockAccountConfigDto.java b/src/main/java/cn/authing/sdk/java/dto/SelfUnlockAccountConfigDto.java index 49d0a5cc..784b3707 100644 --- a/src/main/java/cn/authing/sdk/java/dto/SelfUnlockAccountConfigDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/SelfUnlockAccountConfigDto.java @@ -14,7 +14,7 @@ public class SelfUnlockAccountConfigDto { * 自助解锁方式,目前支持原密码 + 验证码和验证码两种方式。 */ @JsonProperty("strategy") - private String strategy; + private Strategy strategy; public Boolean getEnabled() { return enabled; @@ -23,11 +23,36 @@ public void setEnabled(Boolean enabled) { this.enabled = enabled; } - public String getStrategy() { + public Strategy getStrategy() { return strategy; } - public void setStrategy(String strategy) { + public void setStrategy(Strategy strategy) { this.strategy = strategy; } + + /** + * 自助解锁方式,目前支持原密码 + 验证码和验证码两种方式。 + */ + public static enum Strategy { + + @JsonProperty("captcha") + CAPTCHA("captcha"), + + @JsonProperty("password-captcha") + PASSWORD_CAPTCHA("password-captcha"), + ; + + private String value; + + Strategy(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + } \ No newline at end of file diff --git a/src/main/java/cn/authing/sdk/java/dto/UpdateEmailTemplateDto.java b/src/main/java/cn/authing/sdk/java/dto/UpdateEmailTemplateDto.java index ae9c348d..a542cd22 100644 --- a/src/main/java/cn/authing/sdk/java/dto/UpdateEmailTemplateDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/UpdateEmailTemplateDto.java @@ -66,7 +66,7 @@ public class UpdateEmailTemplateDto { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ @JsonProperty("tplEngine") @@ -219,7 +219,7 @@ public String getValue() { * - `handlebar`: 详细使用方法请见:[handlebars 官方文档](https://handlebarsjs.com/) * - `ejs`: 详细使用方法请见:[ejs 官方文档](https://ejs.co/) * - * 默认将使用 `handlerbar` 作为膜拜渲染引擎。 + * 默认将使用 `handlerbar` 作为模版渲染引擎。 * */ public static enum TplEngine { diff --git a/src/main/java/cn/authing/sdk/java/dto/UpdateSecuritySettingsDto.java b/src/main/java/cn/authing/sdk/java/dto/UpdateSecuritySettingsDto.java index f0aca81d..6df64996 100644 --- a/src/main/java/cn/authing/sdk/java/dto/UpdateSecuritySettingsDto.java +++ b/src/main/java/cn/authing/sdk/java/dto/UpdateSecuritySettingsDto.java @@ -16,7 +16,7 @@ public class UpdateSecuritySettingsDto { * 安全域(CORS) */ @JsonProperty("allowedOrigins") - private String allowedOrigins; + private List allowedOrigins; /** * Authing Token 有效时间(秒) */ @@ -88,10 +88,10 @@ public class UpdateSecuritySettingsDto { @JsonProperty("qrcodeLoginStrategy") private QrcodeLoginStrategyDto qrcodeLoginStrategy; - public String getAllowedOrigins() { + public List getAllowedOrigins() { return allowedOrigins; } - public void setAllowedOrigins(String allowedOrigins) { + public void setAllowedOrigins(List allowedOrigins) { this.allowedOrigins = allowedOrigins; } diff --git a/src/test/java/test/authentication/GetWechatMiniprogramPhoneTest.java b/src/test/java/test/authentication/GetWechatMiniprogramPhoneTest.java deleted file mode 100644 index 2483a5e7..00000000 --- a/src/test/java/test/authentication/GetWechatMiniprogramPhoneTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package test.authentication; - -import cn.authing.sdk.java.client.AuthenticationClient; -import cn.authing.sdk.java.dto.GetWechatMiniProgramPhoneDto; -import cn.authing.sdk.java.dto.GetWechatMiniProgramPhoneRespDto; -import cn.authing.sdk.java.model.AuthenticationClientOptions; -import cn.authing.sdk.java.util.JsonUtils; - -public class GetWechatMiniprogramPhoneTest { - // 需要替换成你的 Authing App ID - private static final String APP_ID = "AUTHING_APP_ID"; - // 需要替换成你的 Authing App Secret - private static final String APP_SECRET = "AUTHING_APP_SECRET"; - // 需要替换成你的 Authing App Host - private static final String APP_HOST = "AUTHING_APP_HOST"; - - public static void main(String[] args) throws Throwable { - AuthenticationClientOptions clientOptions = new AuthenticationClientOptions(); - clientOptions.setAppId(APP_ID); - clientOptions.setAppSecret(APP_SECRET); - clientOptions.setAppHost(APP_HOST); - - AuthenticationClient client = new AuthenticationClient(clientOptions); - - GetWechatMiniProgramPhoneDto reqDto = new GetWechatMiniProgramPhoneDto(); - reqDto.setCode("xxx"); - reqDto.setExtIdpConnidentifier("my-wxapp"); - GetWechatMiniProgramPhoneRespDto response = client.getWechatMiniprogramPhone(reqDto); - System.out.println(JsonUtils.serialize(response)); - } -} diff --git a/src/test/java/test/management/UpdateSecuritySettingsTest.java b/src/test/java/test/management/UpdateSecuritySettingsTest.java index a2976215..690f22f3 100644 --- a/src/test/java/test/management/UpdateSecuritySettingsTest.java +++ b/src/test/java/test/management/UpdateSecuritySettingsTest.java @@ -1,6 +1,10 @@ package test.management; import cn.authing.sdk.java.client.ManagementClient; +import cn.authing.sdk.java.dto.LoginAnomalyDetectionConfigDto; +import cn.authing.sdk.java.dto.LoginAnomalyDetectionConfigDto.LoginFailStrategy; +import cn.authing.sdk.java.dto.LoginFailCheckConfigDto; +import cn.authing.sdk.java.dto.LoginPassowrdFailCheckConfigDto; import cn.authing.sdk.java.dto.SecuritySettingsRespDto; import cn.authing.sdk.java.dto.UpdateSecuritySettingsDto; import cn.authing.sdk.java.model.ManagementClientOptions; @@ -8,20 +12,40 @@ public class UpdateSecuritySettingsTest { // 需要替换成你的 Authing Access Key ID - private static final String ACCESS_KEY_ID = "AUTHING_ACCESS_KEY_ID"; + private static final String ACCESS_KEY_ID = "63591654ab04c1d33f7ac3fc"; // 需要替换成你的 Authing Access Key Secret - private static final String ACCESS_KEY_SECRET = "AUTHING_ACCESS_KEY_SECRET"; + private static final String ACCESS_KEY_SECRET = "1153b67543017662d766ea6a897edcc7"; public static void main(String[] args) throws Throwable { ManagementClientOptions clientOptions = new ManagementClientOptions(); clientOptions.setAccessKeyId(ACCESS_KEY_ID); clientOptions.setAccessKeySecret(ACCESS_KEY_SECRET); // 如果是私有化部署的客户,需要设置 Authing 服务域名 - // clientOptions.setHost("https://api.your-authing-service.com"); + clientOptions.setHost("http://localhost:3000"); ManagementClient client = new ManagementClient(clientOptions); - SecuritySettingsRespDto response = client.updateSecuritySettings(new UpdateSecuritySettingsDto()); + UpdateSecuritySettingsDto updateSecuritySettingsDto = new UpdateSecuritySettingsDto(); + LoginAnomalyDetectionConfigDto loginAnomalyDetectionConfigDto = new LoginAnomalyDetectionConfigDto(); + updateSecuritySettingsDto.setLoginAnomalyDetection(loginAnomalyDetectionConfigDto); + LoginPassowrdFailCheckConfigDto loginPasswordFailCheckConfigDto = new LoginPassowrdFailCheckConfigDto(); + loginPasswordFailCheckConfigDto.setEnabled(true); + loginPasswordFailCheckConfigDto.setTimeInterval(111); + loginPasswordFailCheckConfigDto.setLimit(1111); + loginPasswordFailCheckConfigDto.setEnabled(true); + + LoginFailCheckConfigDto loginFailCheckConfigDto = new LoginFailCheckConfigDto(); + loginAnomalyDetectionConfigDto.setAccountLockLoginPasswordFailCheck(loginPasswordFailCheckConfigDto); + loginFailCheckConfigDto.setTimeInterval(10); + loginFailCheckConfigDto.setLimit(111); + loginFailCheckConfigDto.setEnabled(true); + loginAnomalyDetectionConfigDto.setLoginFailCheck(loginFailCheckConfigDto); + loginAnomalyDetectionConfigDto.setLoginPasswordFailCheck(loginPasswordFailCheckConfigDto); + loginAnomalyDetectionConfigDto.setLoginFailStrategy(LoginFailStrategy.BLOCK_ACCOUNT); + loginAnomalyDetectionConfigDto.setRobotVerify("condition_set"); + loginAnomalyDetectionConfigDto.setRobotVerifyLoginPasswordFailCheck( + loginPasswordFailCheckConfigDto); + SecuritySettingsRespDto response = client.updateSecuritySettings(updateSecuritySettingsDto); System.out.println(JsonUtils.serialize(response)); } }