使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

     2023-03-28     18

关键词:

【中文标题】使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]【英文标题】:Authentication Failed while using Azure AD Bearer Token, to return list of containers [Azure Blob] [Azure AD OAuth 2.0] [REST API] 【发布时间】:2021-06-03 20:19:51 【问题描述】:

我已成功尝试使用Shared key 执行身份验证,然后将REST calls 设置为Azure Blob。 现在我正在尝试使用 AzureAD OAuth 2.0 进行身份验证,以接收承载令牌并将其传递给 Authentication 以生成 REST calls。 我已成功获取Bearer token,但无法执行身份验证。

代码如下:

const request = require("request");
require("dotenv").config();

const account = process.env.ACCOUNT_NAME || "";
const key = process.env.ACCOUNT_KEY || "";
const tenantId = process.env.AZURE_TENANT_ID || "";
const clientId = process.env.AZURE_CLIENT_ID || "";
const clientSecret = process.env.AZURE_CLIENT_SECRET || "";

const options = 
  url: `https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token`,
  formData: 
    grant_type: "client_credentials",
    client_id: clientId,
    scope: "https://graph.microsoft.com/.default",
    // scope:"http://storage.azure.com/.default",
    client_secret: clientSecret,
  ,
  headers: 
    "Content-Type": `application/x-www-form-urlencoded`,
  ,
;

var strTime = new Date().toUTCString();

function callback(error, response, body) 
  const options = 
    url: `https://$account.blob.core.windows.net/?comp=list`,

    headers: 
      Authorization: `Bearer $JSON.parse(response.body).access_token`,
      "x-ms-date": strTime,
      "x-ms-version": "2019-02-02",
    ,
  ;

  request(options, function (error, response, body) 
    console.log("Response is: ", response.statusCode, response.statusMessage);
  );


request(options, callback);

当我尝试运行它时显示 Auth failed。

 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

以下是一些参考链接: Service-Service calls using client credentials, OAuth 2.0 client credentials flow

编辑: 两个链接都尝试了范围,选项 url 从 https://login.microsoftonline.com/$tenantId/oauth2/token 更新为 https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token

访问控制的屏幕截图。

但是,同样的错误仍然存​​在。

【问题讨论】:

你看到了吗:docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad?您的服务主体需要具有其他角色才能访问数据平面 API(例如列出容器)+ 范围也会有所不同。 你试过使用'url:https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token,'吗? v2.0 在这里。 您提供的链接使用的是v2.0版本,您的代码没有使用过。 【参考方案1】:

尝试将scope 更改为https://$account.blob.core.windows.net/.defaulthttps://storage.azure.com/.default

注意事项:

    “v2.0”支持范围。如果你使用v1.0,scope需要替换成resource,代码看起来像resource: "https://$account.blob.core.windows.net/"

    使用formData时,必须设置“multipart/form-data”。

    导航到 Azure 存储 -> 访问控制 (IAM) -> 添加角色分配以将服务主体添加到您的存储帐户

代码:

const request = require("request");
require("dotenv").config();
const axios = require('axios');
const qs = require('qs');

const account = "";
const key = "";
const tenantId = "";
const clientId = "";
const clientSecret = "";

const postData = 
  client_id: clientId,
  scope: `https://$account.blob.core.windows.net/.default`,
  client_secret: clientSecret,
  grant_type: 'client_credentials'
;

axios.defaults.headers.post['Content-Type'] =
  'application/x-www-form-urlencoded';

let token = '';

axios.post(`https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token`, qs.stringify(postData))
  .then(response => 
    console.log(response.data);
    token = response.data.access_token;
  )
  .catch(error => 
    console.log(error);
  );

【讨论】:

我对“将服务主体添加到您的帐户”的确切含义有点困惑我已经用 Azure 门户访问控制 (IAM) 的 ss 更新了上述问题,看看并让我知道我错过了什么。 嗨,@MayankPatel。我在回复中添加了屏幕截图。 pamelaTestApplication 是用于身份验证的应用程序。 我添加了 Mayank Test Registration App 作为 Storage Blob Data Contributor,同一个 app 用于生成 ClientID、ClientSecret、TenantID,但还是一样的 Auth Failed 错误。 对不起,范围应该是https://$account.blob.core.windows.net/.default。我将它与其他流程混淆了:(您可以发布访问令牌,我已经在我的答案中分享了代码。我指的是document。 它解决了@Pamela 的问题,我接受了你的回答。谢谢

Azure 身份验证受众验证失败

...来自Azure的令牌,我还通过react构建了一个单租户SPA,它使用Azure通过MSAL-Brower登录。我想在登录时使用azure提供的令牌来验证我的客户端SPA以调用我的AP 查看详情

尝试使用 AD 令牌/承载令牌 [Azure-Blob][Bearer-Token] 在 Azure Blob 中放置文件时授权权限不匹配

】尝试使用AD令牌/承载令牌[Azure-Blob][Bearer-Token]在AzureBlob中放置文件时授权权限不匹配【英文标题】:AuthorizationPermissionMismatchwhentryingtoPUTafileinAzureBlobwithADtoken/BearerToken[Azure-Blob][Bearer-Token]【发布时间】:2021-06-0601:52:41【问题描述... 查看详情

Azure AD:50155 设备身份验证失败

...由于需要管理员帐户,因此无法设置任何软件。当我尝试使用管理员帐户时,就像在其他桌面上一样,我在日志(Azure)上收到以下错误:“50155设备身份验证失败”和“用户或密码错误”在桌 查看详情

ASP.NET Core Azure AD OpenID - 生产服务器上的令牌签名验证失败

...2018-01-1716:36:06【问题描述】:我有一个ASP.NETCore1.1项目,使用AzureADOpenID进行身份验证。身份验证在我的开发盒(Windows10)上运行良 查看详情

如何使用身份服务器 3 和 microsoft 团队应用程序使用 Azure AD 令牌进行身份验证

】如何使用身份服务器3和microsoft团队应用程序使用AzureAD令牌进行身份验证【英文标题】:HowtoauthenticateusingAzureADtokenusingidentityserver3andmicrosoftteamsapp【发布时间】:2021-05-0612:39:14【问题描述】:我们使用自定义idp(身份服务器3)... 查看详情

验证 Azure AD 令牌签名失败 JAVA

】验证AzureAD令牌签名失败JAVA【英文标题】:ValidatingAzureADTokensignaturefailsJAVA【发布时间】:2017-05-1920:20:24【问题描述】:我正在努力验证AzureAD令牌签名。当我在“jwks_uri”字段中查找正确的键描述时https://login.microsoftonline.com/commo... 查看详情

Azure AD 身份验证令牌未通过 Web api 授权

...问题描述】:我在Azure上有一个需要授权的web-api,我正在使用AzureAD对帐户进行身份验证并生成访问令牌。我可以通过两种不同的方式通过ADAL为同一帐户成功地从AzureAD获取访问令牌,但其中只有一种由web- 查看详情

401 使用 Azure AD 在 .NET Core 3.1 中仅使用不记名令牌进行身份验证

】401使用AzureAD在.NETCore3.1中仅使用不记名令牌进行身份验证【英文标题】:401withbearertokenonlyauthin.NETCore3.1usingAzureAD【发布时间】:2020-08-1209:01:59【问题描述】:我正在尝试使用AzureAD在.NETCore3.1API中实现不记名令牌(仅)身份验证... 查看详情

具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph

...softGraph【发布时间】:2020-12-0914:01:11【问题描述】:我已使用AzureAD身份验证配置AzureFunction,请遵循此文档-EnableAzure 查看详情

使用 Passport 和 passport-azure-ad 时没有刷新令牌

】使用Passport和passport-azure-ad时没有刷新令牌【英文标题】:NorefreshtokenwhenusingPassportandpassport-azure-ad【发布时间】:2017-11-1909:12:21【问题描述】:我正在尝试使用Passport连接到Office365。我得到了身份验证提示并返回了访问令牌。问... 查看详情

使用刷新令牌 adal azure AD 静默更新访问令牌

】使用刷新令牌adalazureAD静默更新访问令牌【英文标题】:SilentlyupdateaccesstokenusingrefreshtokenadalazureAD【发布时间】:2018-12-2012:33:08【问题描述】:环境Angular5前端使用Adal-Angular进行AzureAD身份验证当前情景用户身份验证成功并获取... 查看详情

Azure AD 身份验证使用 idToken 或 accessToken 失败。我应该使用哪一个?

】AzureAD身份验证使用idToken或accessToken失败。我应该使用哪一个?【英文标题】:AzureADauthenticationfailedusingidTokenoraccessToken.WhichoneshouldIuse?【发布时间】:2020-05-0117:41:57【问题描述】:在azure活动目录文档中指出:idToken:id_tokensarese... 查看详情

当用户的 AD 身份验证失败时如何导航到自定义访问被拒绝页面(.net 3.1 核心与 OpenIDConnect Azure AD 身份验证)

】当用户的AD身份验证失败时如何导航到自定义访问被拒绝页面(.net3.1核心与OpenIDConnectAzureAD身份验证)【英文标题】:HowtoNavigatetoCustomAccessDeniedPagewhenADAuthenticationfailedforuser(.net3.1corewithOpenIDConnectAzureADAuthentication)【发布时间】:... 查看详情

Unity for Android 中的 Azure AD 身份验证出错

...ndroid【发布时间】:2019-05-1416:12:55【问题描述】:我正在使用MSAL3.x在我的Android应用程序中构建AzureAD身份验证,但是在尝试通过用户交互获取令牌时会引发错误。MSAL3.x的文档表明需要父活动或窗口,但是使用Unity我对此非常迷茫... 查看详情

构建 VSTS 扩展 azure webapp 身份验证 JWT 令牌验证失败

】构建VSTS扩展azurewebapp身份验证JWT令牌验证失败【英文标题】:BuildVSTSextensionazurewebappauthenticationJWTtokenvalidationfailed【发布时间】:2018-07-0516:20:08【问题描述】:我正在尝试构建一个可以与azureweb应用程序通信的VSTS扩展。我能够... 查看详情

使用 Azure AD B2C 对 Web 应用程序和 Web API 进行基于令牌的身份验证

】使用AzureADB2C对Web应用程序和WebAPI进行基于令牌的身份验证【英文标题】:TokenbasedauthenticationforbothWebAppandWebAPIusingAzureADB2C【发布时间】:2017-08-0710:38:34【问题描述】:场景:Web应用程序和WebAPI都需要从服务器端进行身份验证和... 查看详情

如何配置 Azure AD 访问令牌的过期时间(使用 ADAL)?

】如何配置AzureAD访问令牌的过期时间(使用ADAL)?【英文标题】:HowcanIconfiguretheexpirationtimeofanAzureADaccesstoken(usingADAL)?【发布时间】:2018-04-0120:21:46【问题描述】:我们使用AzureAD通过用户的Office365帐户向我们的WPF应用程序验证... 查看详情

Azure 移动应用身份验证自定义

...受用户用于azure活动目录的用户名和密码,然后用户获取承载令牌以进行进一步请求。这很好用。但奇怪的是,我们找不到将承载令牌从android传递到表控制器端点的方法。之所以定制,是因为我们正在对现有应用程 查看详情