【问题标题】:Token access blocked when posting request from published Azure function从已发布的 Azure 函数发布请求时令牌访问被阻止
【发布时间】:2021-04-23 02:23:21
【问题描述】:

我正在努力通过后请求通过 Azure 功能从“https://login.microsoftonline.com/common/oauth2/token”获取令牌。该令牌将授予通过 CSOM 访问 SharePoint 的权限。这是我的代码 sn-p 与发布请求:

var clientId = defaultAADAppId;
var body = $"resource={resource}&client_id={clientId}&grant_type=password&username={HttpUtility.UrlEncode(username)}&password={HttpUtility.UrlEncode(password)}";
using (var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded"))
{
    var result = await httpClient.PostAsync(tokenEndpoint, stringContent);
    var tokenResult = JsonSerializer.Deserialize<JsonElement>(result);
    var token = tokenResult.GetProperty("access_token").GetString();
}

在本地测试时,无论是在 Visual Studio 中运行该功能还是尝试使用 Postman 时,我都能获得访问令牌。但是,一旦我将函数发布到 Azure 中的函数应用程序,我就会收到以下错误消息:

“AADSTS53003:访问已被条件访问策略阻止。访问策略不允许颁发令牌”

我已在门户中启用应用注册,如前所述,在我将所有内容发布到 Azure 之前一切正常。

关于如何解决这个问题的任何想法?

【问题讨论】:

标签: c# azure-functions access-token csom azure-function-app


【解决方案1】:

正如错误消息所说,您的应用被 CA 政策阻止。 可能的原因可能是未知的客户端应用、阻止外部 IP 地址等。

您可以执行以下解决方法之一:

  • 将您的客户端应用添加到您的 CA 策略中。
  • 我不建议这样做,因为这会影响您的安全性 - 如果您冒风险,您可以从 CA 策略中排除“Microsoft Azure 管理”,该策略会阻止未知客户端/需要设备状态,并仍然保护使用 MFA 登录.
  • 如果可能的话,更好的方法是使用另一个 OAuth 2.0 和 OpenID 连接流,例如直接在应用中登录的委托流。

【讨论】:

【解决方案2】:

我现在开始工作了。首先,我按照@CaseyCrookston 的建议审查了 CA 政策。我发现我们的 CA 政策阻止了我们运营所在国家/地区以外的电话。但是,来自应用注册/Azure 函数的调用是从 Azure 数据中心位置注册的,因此被我们的 CA 策略阻止。在本地运行它们时,调用在我的国家/地区注册,因此在调试时没有显示错误。

我的第一步是尝试将我的客户端应用程序添加到 CA 策略中,但这是不可能的。我根据CSOM guide by Microsoft 中的建议使用的客户端/秘密身份验证阻止了应用注册从 CA 策略 (Github issue) 中列入白名单。

基于此,我必须按照此处的建议将身份验证更改为基于证书的身份验证:Access token request with a certificate 和此处:SO answer。有了这个,我能够在 CA 策略中将应用注册列入白名单,并成功向 Sharepoint CSOM 进行身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多