2017-03-18 7 views
0

私は私のアプリにAzureを統合しています。私はActive DirectoryのAzureポータルでアプリケーションを作成しましたが、ADALライブラリを使用して統合していますが、 。ログインの識別子がディレクトリに見つかりません

i am getting this error

if (mResult != null) { 
     // logout 
     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.removeAllCookie(); 
     CookieSyncManager.getInstance().sync(); 
     authenticationContext.getCache().removeAll(); 
    } else { 
     // login 
     authenticationContext.acquireToken(LoginActivity.this,Constant.CLIENT_ID, 
       Constant.CLIENT_SECRETE_KEY, Constant.REDIRECT_URL, "", PromptBehavior.Auto, "", 
       callback);//CLIENT_ID=my appid at the of app registration //CLIENT_SECRETE_KEY=secret key of registered app in Active Directory //REDIRECT_URL=passing valid url 
    } 

とOnCreate関数でauthenticationcontextを初期化する(これを呼び出すボタンにonclickのボタンを作成して)LoginActivity

authenticationContext = new AuthenticationContext(LoginActivity.this, 
       Constant.AUTHORITY_URL, true);// Authority_URL=https://login.windows.net/mydirectoryname.onmicrosoft.com 

のコールバック

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    authenticationContext.onActivityResult(requestCode, resultCode, data); 
} 

private void showInfo(String msg) { 
    Log.e("", msg); 
} 

    private AuthenticationCallback<AuthenticationResult> callback = new AuthenticationCallback<AuthenticationResult>() { 


     @Override 
     public void onError(Exception exc) { 
      showInfo("getToken Error:" + exc.getMessage()); 
     } 

     @Override 
     public void onSuccess(AuthenticationResult result) { 
      mResult = result; 
      startActivity(new Intent(LoginActivity.this, SecondActivity.class)); 


      if (mResult.getUserInfo() != null) { 
       Log.v("", "User info userid:" + result.getUserInfo().getUserId() 
         + " displayableId:" + result.getUserInfo().getDisplayableId()); 

      } 
     } 
    }; 

とAzureポータルのアプリ登録で、KEYVAULTとMicrosoftAzureActiveDirectoryの許可(ログインしてユーザープロフィールの許可を得る) 私は間違っていますか?

答えて

0

パラメータが間違っている可能性があります。 GitHubでこの例を確認してください:https://github.com/Azure-Samples/active-directory-android/blob/master/TaskApplication/src/main/java/com/microsoft/aad/test/todoapi/ToDoActivity.java#L188

あり、それはで行われます

mAuthContext.acquireToken(ToDoActivity.this, Constants.RESOURCE_ID, 
        Constants.CLIENT_ID, Constants.REDIRECT_URL, Constants.USER_HINT, 
        new AuthenticationCallback<AuthenticationResult>() { 

         @Override 
         public void onError(Exception exc) { 
          if (mLoginProgressDialog.isShowing()) { 
           mLoginProgressDialog.dismiss(); 
          } 
          Toast.makeText(getApplicationContext(), 
            TAG + "getToken Error:" + exc.getMessage(), Toast.LENGTH_SHORT) 
            .show(); 
          navigateToLogOut(); 
         } 

         @Override 
         public void onSuccess(AuthenticationResult result) { 
          if (mLoginProgressDialog.isShowing()) { 
           mLoginProgressDialog.dismiss(); 
          } 

          if (result != null && !result.getAccessToken().isEmpty()) { 
           setLocalToken(result); 
           sendRequest(); 
          } else { 
           navigateToLogOut(); 
          } 
         } 
        }); 

とにかくモバイルアプリで、あなたのクライアントの秘密を持つべきではありません。誰でもあなたのアプリケーションを解凍して見つけることができます。

+0

Constant.ResourceIdで渡す内容とコード内でClientSecretKeyを使用する場所 – sss

+0

クライアントシークレットは使用しません。信頼できない環境で動作しているので、モバイルアプリで使用することはできません。リソースIDは、アクセストークンに使用するリソースのURIです。だからAzure AD Graph APIの場合は 'https:// graph.windows.net /'です。 – juunas

+1

authenticationContext.acquireToken(LoginActivity.this、Constant.RESOURCE_ID、 Constant.CLIENT_ID、Constant.REDIRECT_URL、 ""、PromptBehavior。自動、 ""、 コールバック)。 このAuthority_Url = https://login.windows.net/(mydirectoryname).onmicrosoft.com このRedirect_url = "https://(mydomainname)/ users/auth/azure_oauth2/callback" このリソースID = " https://login.windows.net/(mydirectory_id)/oauth2/token " AADSTS50001エラーが表示される* – sss

0

(結果!= nullを& &!result.getAccessToken()。のisEmpty())の場合{ が間違っている、トークンはnullチェックを追加したりのgetStatus成功チェックを追加...

はい、特別なMSが悪い作成アンドロイドサンプル[私は思う:)]; サンプルから:

最も簡単な方法は、ADとオープン編集マニフェスト下cretedあなたのアプリを開いている AUTHORITY_URLは - アプリマニフェストから「identifierUris」である(アンドロイドいないマニフェスト;アドオンマニフェスト広告登録のWeb-APIアプリから)。 CLIENT_ID - はappIdです。 RESOURCE_ID - マニフェストからのものです。 "requiredResourceAccess":[{"resourceAppId":いくつかの場合は、auth exメッセージになります。

あなたはADアプリでも同じ返信URLを追加する必要があります。

何らかの理由でtodoactivityに直接認証した後にリダイレクトすると失敗したステータスが表示されますが、ユーザーを追加するとログイン情報が表示され、成功ステータスにサインインすることができます。

このサンプルを修正した後、それはまったく動作しますが、1〜2日間のブレーンストーミングは困難でした。 より多くのフォームmsサンプルが期待され、毎年のように見えるqulityは、

関連する問題