Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDevKit は、Studio 6 および Mule 3 とのみ互換性があります。Mule 4 Connector を作成するには、 「Mule SDK」ドキュメントを参照してください。 |
このページでは、DevKit による OAuth V1 認証のサポートについて詳しく説明し、API に対する認証に OAuth V1 を使用するコネクタを実装する方法について説明します。
このドキュメントは、読者が Anypoint Connector DevKit に精通していて、コネクタに認証を実装する準備が整っていることを前提としています。読者がさまざまな認証方法に精通していて、API に対する認証に OAuth V1 を使用していることを前提としています。
OAuth V1 認証の概要や仕組みに精通していない場合、 OAuth Core 1.0 ドキュメントを参照することをお勧めします。
サービスプロバイダの API ドキュメントから、以下の表で示している変数の値を取得します。これらの変数は、認証プロセス中に使用する URL を参照します。このプロセスのステップについての詳細は、 「(OAuth 1.0a 仕様)」の Authenticating With OAuth (OAuth を使用した認証) セクションを参照してください。
変数 | 説明 |
---|---|
|
要求トークンを取得するための URL |
|
アクセストークンを取得するための URL |
|
リソースアクセスへの認証を取得するための URL |
API へのアクセス権を調整する必要もあります。このプロセスは各 API プロバイダに固有ですが、このプロセスの一般的なステップについては「API アクセスのセットアップ」で説明しています。
コネクタで OAuth V1 認証を実装するには、@Connector
クラスで @OAuth
アノテーションを使用する必要があります。
ビルドプロセス中に、@OAuth アノテーションが付加されたコネクタは authorize および unauthorize という名前の自動生成された 2 つの @Processor メソッドを取得します。これらのメッセージプロセッサは、OAuth セッションの開始と終了を行います。
|
次の表で、@OAuth
アノテーションのパラメータについて説明します。
パラメータ | 説明 | 必須かどうか | デフォルト値 |
---|---|---|---|
|
OAuth 1.0a フローで使用する署名メソッド。 |
|
|
|
OAuth 1.0a パラメータが含まれる場所を定義します。 |
|
|
|
未認証の要求トークンを取得するためにサービスプロバイダによって定義される URL。 |
✓ |
|
|
アクセストークンを取得するためにサービスプロバイダによって定義される URL。 |
✓ |
|
|
サービスプロバイダによって定義される URL。リソースオーナーはコンシューマに認証を許可するためにこの URL にリダイレクトされます。 |
✓ |
|
|
リソースオーナーがコンシューマを認証した後で、サービスプロバイダの応答からベリファイアを抽出するために使用される Java 正規表現。 |
|
|
|
サービスプロバイダが受け入れるのが既知のリダイレクト URL のみの場合、このパラメータを、リダイレクト URL としてサービスプロバイダに登録されるドメイン ( |
|
DevKit を使用して OAuth 1.0 に対する認証を実装する場合、次の連動関係を Maven pom.xml
ファイルに追加する必要があります。
<dependency>
<groupId>oauth.signpost</groupId>
<artifactId>signpost-core</artifactId>
<version>1.2.1.1</version>
</dependency>
OAuth V1 は他の認証方法と異なり接続戦略として実装することはできず、@Connector クラスレベルでのアノテーションのみ使用できます。
|
@Connector(name = "myconnector", friendlyName = "MyConnector")
@OAuth(requestTokenUrl = "https://api.mycommector.com/uas/oauth/requestToken",
accessTokenUrl = "https://api.mycommector.com/uas/oauth/accessToken",
authorizationUrl = "https://api.mycommector.com/uas/oauth/authorize")
public class MyConnector {
/**
* YOUR CODE GOES HERE
*/
}
ユーザがコネクタを使用するときにコンシューマキーおよびシークレットを指定できるようにするには、@Connector
クラスで OAuth に関連した @Configurable
インスタンスプロパティが必要です。
OAuth コンシューマキーを保持するための @OAuthConsumerKey
OAuth コンシューマシークレットを保持するための @OAuthConsumerSecret
@Configurable @OAuthConsumerKey private String consumerKey;
@Configurable @OAuthConsumerSecret private String consumerSecret;
また、アクセストークンおよびアクセストークンシークレットを保持するための String (文字列) プロパティも必要であり、以下で示しているように public getter および setter (非表示) のアノテーションが付加されます。
@OAuthAccessToken private String accessToken;
@OAuthAccessTokenSecret private String accessTokenSecret;
@Processor
メソッドを保護するために、次に示しているように @OAuthProtected アノテーションを付加します。
@OAuthProtected
@Processor
public void logInfo() {
logger.info(String.format("OAuthAccessToken=%s", getAccessToken()));
logger.info(String.format("OAuthAccessTokenSecret=%s", getAccessTokenSecret()));
}
@OAuthProtected
@Processor
public void myOperation(String source, Object destination)
{
/**
* CODE FOR MYOPERATION
*/
}
@OAuthProtected @Processor
メソッドが呼び出されると、次のアクティビティを開始します。
保護されたリソースに初めてアクセスするときに、ユーザは保護されたリソースへのコンシューマのアクセス権を許可または拒否するためにサービスプロバイダの認証 URL にリダイレクトされます。
以降のアクセス要求中に、Mule はアクセストークンおよびアクセストークンシークレット (@OAuthAccessToken
および @OAuthAccessTokenSecret
のアノテーションが付いたパラメータ内に含まれる) をサービスプロバイダへの要求に含めます。詳細は、 OAuth 1.0a specification (OAuth 1.0a 仕様) を参照してください。
ほとんどの OAuth 1.0 実装では Jersey クライアントを使用して RESTful API にアクセスしますが、一部の実装ではアプリケーションに固有の Java クライアントライブラリを使用します。ただし、どのクライアントを使用する場合でも、要求と一緒にコンシューマキー、コンシューマシークレット、アクセストークン、アクセストークンシークレットを送信するには、クライアントクラスレベルでコードを追加します。
Jersey クライアントのサンプルでは、この追加は次に示しているように、クライアントクラスのヘルパーメソッド addSignHeader()
によって実行されます。
private WebResource addSignHeader(WebResource webResource) {
OAuthParameters params = new OAuthParameters();
params.signatureMethod("PLAINTEXT");
params.consumerKey(getConnector().getConsumerKey());
params.setToken(getConnector().getAccessToken());
OAuthSecrets secrets = new OAuthSecrets();
secrets.consumerSecret(getConnector().getConsumerSecret());
secrets.setTokenSecret(getConnector().getAccessTokenSecret());
OAuthClientFilter filter = new OAuthClientFilter(client.getProviders(), params, secrets);
webResource.addFilter(filter);
return webResource;
}
コネクタはこのメソッドを通じて Dropbox API にすべてのコールを渡し、OAuth V1 標準によって指定された認証ヘッダーを追加します。これは Jersey クライアントを使用する場合に限られるため、このメソッドの詳細な手順およびクライアントクラスへの適合についてはここでは説明しません。詳細については、Jersey を使用した RESTful API 用のコネクタの作成についての説明を参照してください。
コネクタをビルドしてインストールしたら、以降のセクションで説明しているように、フローで使用できます。
リソースオーナーが保護されたリソースへのアクセス権をコネクタに付与しないと、コンシューマは認証を必要とする操作を実行できません。認証要求を受信すると、Mule はリソースオーナーのブラウザをサービスプロバイダの認証ページにリダイレクトします。それ以降、保護されたリソースにアクセスしようとすると、@OAuthAccessToken
および @OAuthAccessTokenSecret
のアノテーションが付加されたパラメータが入力されます。Mule はアクセストークンおよびトークンシークレットをサービスプロバイダへの要求に含めます。下の例では、 LinkedIn Connector を使用しています。
<linkedin:config apiKey="${api.key}" apiSecret="${api.secret}"/>
...
<flow name="authorize">
<http:inbound-endpoint host="localhost" port="8080" path="/authorize"/>
<linkedin:authorize/>
</flow>
サービスプロバイダから指定されたようにアプリケーションのコンシューマキーおよびコンシューマシークレットを渡して、拡張機能を設定します。下のコードサンプルは、こうした設定の例を示しています。
<linkedin:config apiKey="${api.key}" apiSecret="${api.secret}"/>
...
<flow name="sampleFlow">
<linkedin:get-profile-for-current-user />
</flow>
保護されたリソースへのアクセスを試みるシンプルなフローを設定します。コネクタが OAuth によって認証されていない場合、コンシューマの操作で NotAuthorizedException
がスローされます。
ユーザが保護されたリソースへのアクセス権を付与した場合、サービスプロバイダは HTTP コールバックを行います。このコールバックでは、認証コードが渡されます。Mule は後でこれを使用してアクセストークンを取得します。コールバックを処理するために、Mule は動的に HTTP インバウンドエンドポイントを作成し、続いてエンドポイントの URL をサービスプロバイダに渡します。そのため、HTTP コールバックを行うために特定の設定を行う必要はありません。
デフォルトでは、Mule はホストおよびポート (fullDomain
環境変数および http.port
によって決定される) を使用してサービスプロバイダに送信する URL を構築します。ホストおよびポートにデフォルト以外の値を使用する必要がある場合は、下のコード例で示しているように、設定を追加します。
<linkedin:config apiKey="${api.key}" apiSecret="${api.secret}">
<linkedin:oauth-callback-config domain="SOME_DOMAIN" remotePort="SOME_PORT"/>
</linkedin:config>
Mule によるコールバックの処理についての詳細は、HTTP コールバックについての説明を参照してください。
Mule が OAuth コールバックを処理するために HTTP インバウンドエンドポイントを自動的に起動する場合、デフォルトでは HTTP Connector を使用します。サービスプロバイダが HTTPS を必要とする場合、独自の HTTPS Connector を渡すように Mule を設定できます。
NOTE: HTTPS Connector の設定についての詳細は、「HTTPS トランスポートリファレンス」および HTTPS の例を参照してください。