我必须开发一个android应用程序,它调用在Azure上托管的API操作。对API的访问由AD管理。API在Azure中注册为Web /API。
我想要实现的是客户端应用程序通过提供客户端凭据从AD获取令牌,然后使用此令牌访问API操作。
通过使用.net ADAL库,我们可以实现如下所示:
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net.Http;
...
var cc = new ClientCredential(clientId, clientSecret);
var ac= new AuthenticationContext(authority,false);
var token = ac.AcquireToken(resource,cc);
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new Headers.AuthenticationHeaderValue("Bearer",token.AccessToken);
var response = client.GetAsync(url).Result;
var responseContent= response.Content.ReadAsStringAsync().Result;在ADAL for android中,没有客户端凭据类,因此为了从AuthenticationContext类获取令牌,我将API应用程序类型从Web /API更改为Azure中的本机应用程序类型。
然后,下面的实现提示一个windows登录页面,但我希望使用存储在config中的客户端凭据,而不是手动登录弹出:
AuthenticationContex authenticationContext = new AuthenticationContext(MainActivity.this,
AUTHORITY, true);
authenticationContext.acquireToken(MainActivity.this,
RESOURCE,
CLIENT_ID,
REDIRECT_URI,
PromptBehavior.Always,
new AuthenticationCallback<AuthenticationResult>() {
@Override
public void onSuccess(AuthenticationResult result) {
String idToken = result.getIdToken();
String accessToken = result.getAccessToken();
Log.d(LOG_TAG, "ID Token: " + idToken);
Log.d(LOG_TAG, "Access Token: " + accessToken);
}
@Override
public void onError(Exception exc) {
// TODO: Handle error
}
});你知道如何做到这一点吗?为什么.Net和安卓的ADAL库不同?
谢谢
发布于 2016-11-24 03:10:03
Android是一个公共客户端,任何人都不应该在本地应用程序中执行机密客户端流。客户端凭据是用于机密客户端流的,因此不会在android中公开。.net可以同时用于服务器和客户端,但这并不意味着您在本地应用程序中使用机密客户端流。
https://stackoverflow.com/questions/40777379
复制相似问题