사용자 정의 중개자

OAuth 2.0 중개자는 사용자 정의된 사후 처리를 수행하기 위해 OAuth 2.0 메시지 처리 중에 콜백으로 사용됩니다.

OAuth20 중개자 쓰기

중개자를 쓰려면 com.ibm.oauth.core.api.oauth20.mediator.OAuth20Mediator라는 인터페이스를 구현해야 합니다. 하나 이상의 mediate* 메소드를 구현하여 사용자 정의 사후 처리를 수행할 수 있습니다.
void init(OAuthComponentConfiguration config)
이 메소드는 이 오브젝트의 인스턴스가 작성될 때 팩토리에 의해 호출됩니다.
void mediateAuthorize(AttributeList attributeList)
이 메소드는 processAuthorization 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 기본 메시지 유효성 검증 및 처리 후에 해당 컴포넌트에 의해 호출됩니다.
void mediateAuthorizeException(AttributeList attributeList, OAuthException exception)
이 메소드는 processAuthorization 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 프로토콜 예외가 발생할 때 해당 컴포넌트에 의해 호출됩니다.
void mediateResource(AttributeList attributeList)
이 메소드는 processResourceRequest 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 기본 메시지 유효성 검증 및 처리 후에 해당 컴포넌트에 의해 호출됩니다.
void mediateResourceException(AttributeList attributeList, OAuthException exception)
이 메소드는 processResourceRequest 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 프로토콜 예외가 발생할 때 해당 컴포넌트에 의해 호출됩니다.
void mediateToken(AttributeList attributeList)
이 메소드는 processTokenRequest 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 기본 메시지 유효성 검증 및 처리 후에 해당 컴포넌트에 의해 호출됩니다.
void mediateTokenException(AttributeList attributeList, OAuthException exception)
이 메소드는 processTokenRequest 메소드에서 코어 컴포넌트 이용자에 의한 모든 사후 사용자 정의 처리를 허용하기 위해 프로토콜 예외가 발생할 때 해당 컴포넌트에 의해 호출됩니다.

OAuth 제공자를 위한 OAuth20 중개자 사용 설정

특정 OAuth20 서비스 제공자에게 사용자 정의된 중개자를 추가하려면 서비스 제공자에 대한 구성 파일(예: OauthConfigSample.xml)을 업데이트하십시오. oauth20.mediator.classnames 매개변수를 찾아서 중개자의 클래스 이름을 추가하십시오. 또한 oauth20.mediator.classnames 매개변수에 대해 중개자의 다중 클래스 이름을 지정할 수도 있습니다. 다중 중개자가 지정되는 경우, 해당 중개자는 매개변수에서 지정되는 순서대로 시작됩니다. 다음 예는 제공자 구성 파일의 샘플 사용자 정의 중개자 항목을 보여줍니다.
<parameter name="oauth20.mediator.classnames" type="cc" customizable="false">
  <value>org.acme.oauth2.sampleMediator</value>
  <value>org.acme.oauth2.sampleMediator2</value>
</parameter>
다음 코드 샘플은 자원 소유자 비밀번호 신임 정보 플로우에서 WebSphere® Application Server 사용자 레지스트리를 사용하여 신임 정보 유효성 검증을 구현합니다.
package com.ibm.ws.security.oauth20.mediator;

import com.ibm.oauth.core.api.attributes.AttributeList;
import com.ibm.oauth.core.api.config.OAuthComponentConfiguration;
import com.ibm.oauth.core.api.error.OAuthException;
import com.ibm.oauth.core.api.error.oauth20.OAuth20MediatorException;
import com.ibm.oauth.core.api.oauth20.mediator.OAuth20Mediator;
import com.ibm.oauth.core.internal.oauth20.OAuth20Constants;
import com.ibm.websphere.security.CustomRegistryException;
import com.ibm.websphere.security.PasswordCheckFailedException;
import com.ibm.websphere.security.UserRegistry;

import java.rmi.RemoteException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ResourceOwnerValidationMedidator implements OAuth20Mediator {
  private static final String CLASS = ResourceOwnerValidationMedidator.class.getName();
  private static final Logger LOG = Logger.getLogger(CLASS);
  private UserRegistry reg = null;

  public void init(OAuthComponentConfiguration config) {
    try {
      InitialContext ctx = new InitialContext();
      reg = (UserRegistry) ctx.lookup("UserRegistry");
    } catch(NamingException ne) {
      LOG.log(Level.SEVERE, "Cannot lookup UserRegistry", ne);
    }
  }

  public void mediateAuthorize(AttributeList attributeList)
    throws OAuth20MediatorException {
    // nothing to do here
  }

  public void mediateAuthorizeException(AttributeList attributeList,
                                        OAuthException exception)
    throws OAuth20MediatorException {
    // nothing to do here
  }

  public void mediateResource(AttributeList attributeList)
    throws OAuth20MediatorException {
    // nothing to do here
  }

  public void mediateResourceException(AttributeList attributeList,
                                       OAuthException exception)
    throws OAuth20MediatorException {
    // nothing to do here
  }

  public void mediateToken(AttributeList attributeList)
    throws OAuth20MediatorException {
    final String methodName = "mediateToken";
    LOG.entering(CLASS, methodName, attributeList);
    if("password".equals(attributeList.getAttributeValueByName("grant_type"))) {
      String username = attributeList.getAttributeValueByName("username");
      String password = attributeList.getAttributeValueByName("password");
      try {
        reg.checkPassword(username, password);
      } catch (PasswordCheckFailedException e) {
        throw new OAuth20MediatorException("User doesn't exist or the
                                           password doesn't match.", e);
      } catch (CustomRegistryException e) {
        throw new OAuth20MediatorException("Cannot validate resource owner.", e);
      } catch (RemoteException e) {
        throw new OAuth20MediatorException("Cannot validate resource owner.", e);
      } 
    }
    LOG.exiting(CLASS, methodName);
  }

  public void mediateTokenException(AttributeList attributeList,
                                    OAuthException exception)
    throws OAuth20MediatorException {
    final String methodName = "mediateTokenException";
    LOG.entering(CLASS, methodName, new Object[] {attributeList, exception});
    if("password".equals(attributeList.getAttributeValueByName("grant_type"))) {
      // clear sensitive data
      attributeList.setAttribute("access_token",
                                 OAuth20Constants.ATTRTYPE_RESPONSE_ATTRIBUTE,
                                 new String[0]);
      attributeList.setAttribute("refresh_token",
                                 OAuth20Constants.ATTRTYPE_RESPONSE_ATTRIBUTE,
                                 new String[0]);
    }
    LOG.exiting(CLASS, methodName);
  }

}

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_oauthcustommediator
파일 이름:cwbs_oauthcustommediator.html