在目录中找不到标识符
我正在将Azure集成到我的应用程序中。我在Active Directory的Azure门户中创建了应用程序,并使用ADAL库进行了集成,但是当我运行获取Microsoft登录屏幕的应用程序时, 。在目录中找不到标识符
对于登录创建的按钮和的onclick按钮调用此
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 LoginActivity
authenticationContext = new AuthenticationContext(LoginActivity.this,
Constant.AUTHORITY_URL, true);// Authority_URL=https://login.windows.net/mydirectoryname.onmicrosoft.com
的初始化authenticationcontext()
@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 Portal在应用程序注册中获得了KEYVAULT和MicrosoftAzureActiveDirectory的许可(登录并阅读用户配置文件许可) 我做错了什么?
您的参数可能是错误的。在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();
}
}
});
你不应该在移动应用客户端的秘密呢。任何人都可以解开你的应用程序并找到它。
如果(结果!= NULL & &!result.getAccessToken()的isEmpty()){ 是错误的,加标记空检查或添加成功的getStatus检查...
是,MS特殊制造不良android示例[我认为:)];
简单的方法是打开下AD和开放的编辑清单您的应用程序creted: 从样本: AUTHORITY_URL - 是“identifierUris”从应用程序清单(未Android清单;从注册广告网络的API应用程序添加舱单); CLIENT_ID - 是appId; RESOURCE_ID - 也来自manifest; “requiredResourceAccess”:[{“resourceAppId”:有些时候是auth ex消息;
并且您应该在AD应用程序中添加相同的回复Url;
如果auth直接重定向到todoactivity由于某种原因导致失败状态,但如果打开添加用户,您可以看到登录用户信息并登录成功状态;
因此,在修复该样本后,它完全可以工作,但这是一场长达1-2天的头脑风暴; 预计更多样式ms样品,看起来像每年的质量是去妈妈和更低;
什么在Constant.ResourceId中传递以及代码中使用ClientSecretKey的位置 – sss
您不使用客户端密钥。您不能在移动应用中使用它,因为它们在不受信任的环境中运行。资源ID是您想要访问令牌的资源的URI。所以例如'https:// graph.windows.net /'用于Azure AD Graph API。 – juunas
authenticationContext.acquireToken(LoginActivity.this,Constant.RESOURCE_ID, Constant.CLIENT_ID,Constant.REDIRECT_URL,“”,PromptBehavior。Auto,“”, callback);我使用这个Authority_Url = https://login.windows.net/(mydirectoryname).onmicrosoft.com this Redirect_url =“https://(mydomainname)/ users/auth/azure_oauth2/callback” 这个资源id =“ https://login.windows.net/(mydirectory_id)/oauth2/token“ 但得到AADSTS50001错误* – sss