質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1276閲覧

AndroidからNokiaのOAuth1.0認証

fefe

総合スコア46

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/11/17 07:35

現在AndroidからNokiaAPIのOAuth認証がしたいと思い、以下のアプローチでOAuth認証に取り組んでおります。
1, URIを使用し、必要パラメータを挿入して認証URLを生成
2, URLを内蔵ブラウザに飛ばした後、コールバックURLからアプリを起動
3, onResumeでIntentからデータを受け取り、tokenを使ってユーザー認証URLを生成

現在この手順の2で詰まっております。
認証URLを生成してブラウザに飛ばすことは出来ているのですが、Invalid Signatureが帰ってきてしまい、Tokenを取得することが出来ません。
Signature生成のアルゴリズムに関しては公式のコンソールにある値を入れてみて正常なSignatureを生成することができたので問題はありません。

以下認証URL生成部分のコードです。

Java

1 private Uri buildRequestTokenUri() { 2 Uri.Builder builer = Uri.parse(API_REQUEST_TOKEN_URL).buildUpon() 3 .appendQueryParameter("oauth_callback", API_OAUTH_REDIRECT) 4 .appendQueryParameter("oauth_consumer_key", API_OAUTH_KEY) 5 .appendQueryParameter("oauth_nonce", UUID.randomUUID().toString()) 6 .appendQueryParameter("oauth_signature_method", "HMAC-SHA1") 7 .appendQueryParameter("oauth_timestamp", Long.toString(System.currentTimeMillis() / 1000L)) 8 .appendQueryParameter("oauth_version", "1.0"); 9 10 String url = URLEncoder.encode(API_REQUEST_TOKEN_URL); 11 String queries = URLEncoder.encode(builer.build().getQuery()); 12 13 String baseString = "GET&" + url + "&" + queries; 14 String signature = ""; 15 try { 16 signature = URLEncoder.encode((hmacSha1(baseString, API_OAUTH_SECRET + "&")).trim()); 17 } catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) { 18 e.printStackTrace(); 19 } 20 21 builer.appendQueryParameter("oauth_signature", signature); 22 Log.d("signature", signature); 23 24 return builer.build(); 25 } 26 27 private static String hmacSha1(String value, String key) 28 throws UnsupportedEncodingException, NoSuchAlgorithmException, 29 InvalidKeyException { 30 String type = "HmacSHA1"; 31 SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type); 32 Mac mac = Mac.getInstance(type); 33 mac.init(secret); 34 byte[] bytes = mac.doFinal(value.getBytes("UTF-8")); 35 36 return new String(Base64.encodeToString(bytes, 0)); 37 }

いろいろ試してみた所、タイムスタンプが微妙にサーバー側とずれている事が原因かと思われましたが、タイムスタンプに関するエラーは帰ってこず、現状 System.currentTimeMillis() / 1000L 以外を使ったタイムスタンプ生成の術を持っておりません。

どうかご教授のほどよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問