2015-10-15 18 views
9

目標は、JavaアプリケーションのNLAuth-headerではなくOAuth-headerを使用してRESTletを呼び出すことです。OAuth経由でNetSuite RESTletに到達

  1. 私はNetSuiteの開発者コミュニティのアカウントを作成し、管理者権限(ドメインsystem.na1.netsuite.com)でテスト環境を得た。それを達成するために、私は、次の手順を実行しました。

  2. セットアップ - >会社 - >機能を有効にしました。その後、 "SuiteCloud"タブを開き、ここで "Client SuiteScript"、 "Server SuiteScript"、 "Token-Based Authentication"をチェックしました。

  3. 私は役割の編集ページを開きました(ここでは「08:検査」と呼ばれています)。 「アクセス許可トークン管理」、「アクセストークンを使用してログインする」、および「ユーザーアクセストークン」の各アクセス権をこの役割に追加しました。

  4. ユーザーの編集中に「アクセス」タブを開き、「ロール」タブを開いてそのロール(「08:検査」)を追加しました。

  5. セットアップ - >統合 - >統合管理 - >新規を開き、ここに新しいアプリケーション(「TestIntegr」)を作成しました。最後のページには、Consumer KeyとConsumer Secretという2つの文字列があります。私はそれらを別のファイルに保存しました。

  6. セットアップ - >ユーザー/ロール - >アクセストークン - >新規を開き、自分のアプリケーション+ユーザー+役割の新しいトークンを作成しました。最後のページには、トークンIDとトークンシークレットという2つの文字列があります。私はそれらを別のファイルに保存しました。

  7. テストプログラムを使用して認証ヘッダー文字列を生成し、この文字列をrest-client(私は "Insomnia"を使用)で使用してダミーレセレットに到達しました。 「INVALID_LOGIN_ATTEMPT」 - エラーが発生しました。

  8. NetSuiteの監査ログでは、ユーザーの代わりに役割がなくてもエラーが表示されます。

以下の例を含む7番目のステップに関するさらに詳しい情報

GET&https%3A%2F%2Frest.na1.netsuite.com%2Fapp%2Fsite%2Fhosting%2Frestlet.nl&deploy%3D1%26oauth_consumer_key%3D17840f699409f5031c22a6e4af15961e9627c168cd0ae71f9c14f71b4097a0b6%26oauth_nonce%3D1444927941574%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1444927941%26oauth_token%3Df3c29a8b2c7988e00947d8c5836ef0ff1883556d96b8beac5bbbdda001ba0292%26realm%3DTSTDRV1403065%26script%3D546 
:私は私のダミーのRestletに到達するために使用

URLは、だから私は(ステップ6からステップ5から "CONSUMER_KEY" と "トークン") "の署名文字列を" 生成https://rest.na1.netsuite.com/app/site/hosting/restlet.nl?script=546&deploy=1

ました

この文字列と "consumer_secret & token_secret"を使って "signature"を生成しました。

OAuth oauth_signature="7doRJOJyV36Av4e4BBUgoOPn7Vk%3D", oauth_nonce="1444927941574", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="17840f699409f5031c22a6e4af15961e9627c168cd0ae71f9c14f71b4097a0b6", oauth_token="f3c29a8b2c7988e00947d8c5836ef0ff1883556d96b8beac5bbbdda001ba0292", oauth_timestamp="1444927941", realm="TSTDRV1403065" 
その後

私は私の残りのクライアントでこのヘッダーを使用してNLAuthヘッダは、この残りのクライアントで完全に動作している間(「INVALID_LOGIN_ATTEMPT」-errorを持って、このユーザーとこのダミー:ヘッダーには、次を見ていました-restlet)。

このオンラインツールで自分の署名アルゴリズムを確認しました:http://nouncer.com/oauth/authentication.html同じトークン/タイムスタンプ/ノンス/などで同じ結果が表示されます。私は、NetSuite環境(ユーザ/ロール/何か他のもの)を設定する際に何かを見逃したと思います。反対側のNetSuiteヘルプセンターでは、「OAuthヘッダーのナンス、コンシューマキー、トークン、または署名が無効な場合、INVALID_LOGIN_ATTEMPTエラーが返されます。

どうか私に教えてください。

答えて

9

消費者キーとユーザーキーを取得できるので、手順が正しいようです。

あなたのJavaコードに間違いがある可能性があります。 Javaコードを使用してRESTLetから正常な応答を得ることができました。 OAuth 1aクライアントライブラリとしてScribe-Javaを使用しました。以下は

は、それが筆記体で必要とされるように、あなたも、NetSuiteApiクラスを記述する必要があります私の主な方法

OAuthConfig authConfig = new OAuthConfig("CONSUMER_KEY", "CONSUMER_SECRET", null, SignatureType.Header, null, null); 
    Token token = new Token("TOKEN_ID", "TOKEN_SECRET"); 
    OAuth10aServiceImpl auth10aServiceImpl = new OAuth10aServiceImpl(new NetSuiteApi(), authConfig); 
    OAuthRequest request = new OAuthRequest(Verb.GET, "RESTLET_URL"); 
    request.setRealm("NS_ACCOUNT_ID"); 
    auth10aServiceImpl.signRequest(token, request); 
    Response response = request.send(); 

です。ただ、フレームワークオーバーヘッド

import org.scribe.builder.api.DefaultApi10a; 
import org.scribe.model.Token; 

public class NetSuiteApi extends DefaultApi10a { 

@Override 
public String getAccessTokenEndpoint() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public String getAuthorizationUrl(Token arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public String getRequestTokenEndpoint() { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

また、ユーザーまたはユーザーが展開でRESTletを実行するためのアクセス権を持っていることを確認してください。

+1

ありがとう、prasun!スクライブのあなたの例は、魅力のように機能します。あなたが私のJavaコードについて正しいと感じる。 :( – Logrus

関連する問題