详解AuthC

发布时间:2023-05-19

一、authchainlist is null翻译

在使用AuthC的过程中,我们可能会遇到一个错误信息为authchainlist is null。这个错误是由于在定义AuthenticatingRealm时没有设置AuthenticationStrategy导致的。AuthenticationStrategy用于设置验证策略,包括AllSuccessfulStrategy(所有Realm验证成功即认证成功)、AtLeastOneSuccessfulStrategy(至少有一个Realm验证成功即认证成功)、FirstSuccessfulStrategy(第一个Realm验证成功即认证成功),默认是AtLeastOneSuccessfulStrategy。 以下为设置AuthenticationStrategy的示例代码:

public class MyRealm extends AuthenticatingRealm {
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        // ...
    }
    @Override
    public void onInit() {
        super.onInit();
        ModularRealmAuthenticator authenticator = (ModularRealmAuthenticator) getAuthenticator(); // 在此处获取Authenticator
        authenticator.setAuthenticationStrategy(new AllSuccessfulStrategy()); // 设置AllSuccessfulStrategy策略
    }
}

二、authcode翻译

AuthCode翻译成中文是“授权码”,也可以称为“令牌”。在OAuth2授权流程中,当用户授权后,授权服务器会发放一个授权码给客户端应用程序,客户端应用程序使用授权码到后台进行交换以获取访问令牌(Access Token),以此来获取授权资源。

三、authcenter mem weitutor

AuthCenter是一款用于应用系统授权认证的系统,mem和weitutor是两个AuthCenter的插件,分别用于进行基于内存和weituor方式的授权认证。

四、authcode不合法

当AuthCode不合法时,我们需要查看具体的错误信息,可能是由于无效的授权码、授权码已失效或授权码与客户端ID或密钥不匹配等原因引起的。以下为查看错误信息的示例代码:

public class MyAuthzServer extends AuthorizationServer {
    @Override
    protected Response handleException(Exception e, Map<String, Object> responseParams) {
        if (e instanceof InvalidGrantException) { // InvalidGrantException表示授权码不合法
            responseParams.put("errorCode", "100001"); // 在responseParams中添加自定义错误码
            responseParams.put("errorMsg", "invalid authcode"); // 在responseParams中添加自定义错误信息
        }
        // ... 其他异常处理逻辑
    }
}

五、authcenter alipay

AuthCenter还支持使用支付宝进行授权认证,我们可以通过在AuthCenter中配置alipay相关参数来实现。以下为示例代码:

public class MyAuthzServer extends AuthorizationServer {
    @Override
    protected void configure(ClientDetailsServiceBuilder builder) throws Exception {
        builder.inMemory()
                .withClient("alipay")
                .secret("secret")
                .authorizedGrantTypes("authorization_code")
                .scopes("read", "write")
                .redirectUris("https://www.alipay.com/authorize")
                .autoApprove(true); // 启用自动授权
    }
    @Override
    public void onInit() throws Exception {
        super.onInit();
        AlipayAuthenticator alipayAuthenticator = new AlipayAuthenticator();
        alipayAuthenticator.setAppId("app_id");
        alipayAuthenticator.setPrivateKey("private_key");
        alipayAuthenticator.setAlipayPublicKey("alipay_public_key");
        setAuthenticator(alipayAuthenticator);
    }
}

六、auth词根词缀

Auth的词根词缀是“授权、认证”的意思,AuthC的全称为AuthenticatingClient,即“认证客户端”,是一个用于进行应用系统授权认证的框架。

七、authCode无效或已过期怎么办

当我们在使用AuthC进行授权认证时,可能会遇到authCode无效或已过期的错误信息。这个错误通常是由于授权码已过期或客户端多次使用同一授权码引起的。如果本次验证失败,我们需要在授权服务器端删除该授权码,以避免继续使用。 以下为示例代码:

public class MyAuthToken extends AuthenticationToken {
    @Override
    public Object getCredentials() {
        // ...
    }
    @Override
    public Object getPrincipal() {
        // ...
    }
    @Override
    public boolean isExpired() {
        return true; // 判断授权码是否过期
    }
}
public class MyAuthzServer extends AuthorizationServer {
    @Override
    protected Response handleTokenRequest(Request request, String clientAuthorization) {
        // 获取授权码,并进行验证
        String code = request.getParameter("code");
        // ...
        // 验证失败,删除授权码
        try {
            ((DefaultTokenStore) getTokenStore()).removeCode(code);
        } catch (TokenStoreException ignored) {
        }
        // ...
    }
}

八、auth厂

AuthC是一个由Apache Shiro社区开发的框架,是Shiro框架的扩展模块之一。Shiro是一个Java安全框架,提供了身份认证、授权、加密解密等功能。

九、auth错误

当我们在使用AuthC进行授权认证时,可能会遇到各种各样的错误信息,包括AuthChainExecutionExceptionUnsupportedTokenExceptionExpiredCredentialsException等。当遇到这些错误时,我们需要根据错误信息进行相应的处理,可能需要查看具体的错误栈信息来进行排查和处理。