首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android如何将ADAL库与clientCredential一起使用到aquireToken,然后调用托管在Azure上的API

Android如何将ADAL库与clientCredential一起使用到aquireToken,然后调用托管在Azure上的API
EN

Stack Overflow用户
提问于 2016-11-24 02:56:05
回答 1查看 380关注 0票数 1

我必须开发一个android应用程序,它调用在Azure上托管的API操作。对API的访问由AD管理。API在Azure中注册为Web /API。

我想要实现的是客户端应用程序通过提供客户端凭据从AD获取令牌,然后使用此令牌访问API操作。

通过使用.net ADAL库,我们可以实现如下所示:

代码语言:javascript
复制
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中的客户端凭据,而不是手动登录弹出:

代码语言:javascript
复制
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库不同?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 03:10:03

Android是一个公共客户端,任何人都不应该在本地应用程序中执行机密客户端流。客户端凭据是用于机密客户端流的,因此不会在android中公开。.net可以同时用于服务器和客户端,但这并不意味着您在本地应用程序中使用机密客户端流。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40777379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档