例如,我可以通过 getaccesstokencredentials(username, password) 通过图形 api 进行身份验证我可以使用此令牌访问 Azure 吗?目前我们可以使用管理库中的 usertokencredentials 和 applicationtokencredentials,然后一旦完成,您就可以创建 azure 类的实例。Azure azure = Azure.authenticate(credentials).withdefaultsubscription。我想知道我们是否可以使用 getaccesstokencredentials 中的令牌而不是 usertokentcredentials 和 applicationtokencredentials
问问题
234 次
1 回答
0
我们不能使用同一个访问令牌来调用图形 api 和调用 api 来管理 Azure 资源。因为图形 apihttps://graph.microsoft.com/
的资源 url 是,但 Azure 管理 rest api 的资源 url 是https://management.azure.com/
. 有关详细信息,请参阅https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-api-authentication。
此外,关于如何使用 Azure AD 访问 Azure 存储,请参考以下步骤:
- 向您的委托人添加角色分配。
获取令牌。
public static String getToken() throws Exception { String TENANT_ID = "your tenant id or name, e4c9*-*-*-*-*57fb"; String AUTHORITY = "https://login.microsoftonline.com/" + TENANT_ID; String CLIENT_ID = "your application id, dc17*-*-*-*a5e7"; String CLIENT_SECRET = "the secret, /pG*32"; String RESOURCE = "https://storage.azure.com/"; String ACCESS_TOKEN = null; ExecutorService service = Executors.newFixedThreadPool(1); AuthenticationContext context = null; try { context = new AuthenticationContext(AUTHORITY, false, service); ClientCredential credential = new ClientCredential(CLIENT_ID, CLIENT_SECRET); Future<AuthenticationResult> future = context.acquireToken(RESOURCE, credential, null); ACCESS_TOKEN = future.get().getAccessToken(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } finally { service.shutdown(); } return ACCESS_TOKEN; }
访问 blob。
public static void main(String[] args) throws Exception { String token = getToken(); StorageCredentialsToken credentialsToken = new StorageCredentialsToken("storagetest789", token); CloudBlobClient blobClient = new CloudBlobClient(new URI("https://storagetest789.blob.core.windows.net/"), credentialsToken); CloudBlobContainer blobContainer = blobClient.getContainerReference("pub"); CloudBlockBlob blockBlob = blobContainer.getBlockBlobReference("test1.txt"); blockBlob.uploadText("mytest"); }
有关详细信息,请参阅https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad。
于 2019-09-26T05:25:25.427 回答