目录中找不到标识符

时间:2017-03-18 11:25:51

标签: android azure

我正在将Azure集成到我的应用程序中。我已在Active Directory目录中的Azure门户创建了应用程序,并使用ADAL库进行集成,但是当我运行应用程序获取Microsoft的登录屏幕时,登录后收到此错误。

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
    }

并在LoginActivity的oncreate()中初始化authenticationcontext

 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的许可(登录并阅读用户配置文件权限) 我做错了什么?

2 个答案:

答案 0 :(得分: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();
                            }
                        }
                    });

无论如何,您不应该在移动应用中保密您的客户端。任何人都可以打开您的应用程序并找到它。

答案 1 :(得分:0)

if(result!= null&amp;&amp;!result.getAccessToken()。isEmpty()){ 是错误的,添加令牌空检查或添加getStatus成功检查...

是的,ms特别创建了不好的android示例[我认为:)];

最简单的方法是在AD下打开你的应用程序并打开编辑清单: 来自样本: AUTHORITY_URL - 来自应用清单的“identifierUris”(不是Android清单;来自广告注册的web-api app的add-manifest); CLIENT_ID - 是appId; RESOURCE_ID - 来自清单;  “requiredResourceAccess”:[{“resourceAppId”:有时它出现在auth ex message中;

您也应该在AD应用中添加相同的回复网址;

如果由于某种原因将auth直接重定向到todoactivity后会导致失败状态,但如果打开添加用户,您可以看到登录用户信息并登录成功状态;

所以修好那个样本之后就可以了,但这是一个艰难的1-2天头脑风暴; 期望更多的形式ms样本,看起来每年的质量都会变得更低;