gpt4 book ai didi

即使使用 MobileServiceClient - UWP 成功登录后,Azure MobileApp API 也会返回 401(未经授权)

转载 作者:行者123 更新时间:2023-12-03 02:57:40 26 4
gpt4 key购买 nike

移动应用服务

我有一个 Azure MobileApp,其应用服务身份验证配置为“AAD 提供商”

Azure AD 应用程序

我已经在 MobileApp 的 Manifest 文件中创建了 azure 广告应用程序和一些自定义角色,并向其中添加了用户。

UWP 应用

在我的 UWP 包 list 声明中,我添加了与 MobileApp 轻松身份验证中配置的“{uri_schema}”相同的协议(protocol)。

创建 MobileServiceClient 如下

MobileServiceClient client = new MobileServiceClient("https://mymobileapp.azurewebsites.net/")
{
CurrentUser = this.Container
.Resolve<IAuthenticator>()
.CurrentUser // This will be null for the first time
};

然后,使用以下代码登录并将凭据存储在保管库中。

this.CurrentUser = await this.app.ATTTMClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, "{uri_schema}");
credential = new PasswordCredential("{vaultkey}", this.CurrentUser.UserId, this.CurrentUser.MobileServiceAuthenticationToken);
this.Vault.Add(credential);

到目前为止,我在 AD 中创建的用户凭据的身份验证已成功并存储在凭据保管库中。

但是,当我如下使用 InvokeApiAsync 调用任何 Mobile API 方法时,我收到以下错误:

HttpResponseMessage resp = await client.InvokeApiAsync(apiRoute, content, httpMethod, this.requestHeaders, parameters);

错误:请求无法完成。 (未经授权)

休息后调用示例:

Method: GET, RequestUri: 'https://mymobileapp.azurewebsites.net/api/controller/action?key=value', Version: 2.0, Content: ,

Headers:

{

Request-Id: f987cff8-XXXX-XXXX-XXX-374b8408ea53

X-ZUMO-FEATURES: AG

X-ZUMO-INSTALLATION-ID: e8d23287-XXXX-XXXX-XXXX-b7885af589ef

X-ZUMO-AUTH: eyJ0eXAiOiJKVXXXXXXXXXOiJIUzI1NiJ9.eyXXXXXXXXXkOjFmNTlhZDI2MGJmZjVXXXXDBhZTllYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0dG1hdXNlZWFzLmF6dXJld2XXXZXMubmV0LyIXXXXXXXXXXXXzOi8vYXR0dG1hdXNlZWFzLmF6dXJld2Vic2l0ZXMubmV0LyIsImV4cCI6MTUXXXXXXXXXXTMzMTE2MDQwfQ.8fha-XymJSDEIxw22RSymW9T4XXXXXXXXWFh_zpF7ag

User-Agent: ZUMO/4.0

User-Agent: (lang=Managed; os=Windows Store; os_version=--; arch=X64; version=4.0.2.0)

X-ZUMO-VERSION: ZUMO/4.0 (lang=Managed; os=Windows Store; os_version=--; arch=X64; version=4.0.2.0)

ZUMO-API-VERSION: 2.0.0

Cookie: ARRAffinity=c2ec7bad91771ba38a3XXXXXXXXXXXXXXX56cb5457cc94b47c79e2847

Accept-Encoding: gzip

}

此时,我正在成功刷新 token ,但使用刷新的 token 重试 API 调用仍然失败并出现相同的错误。

在我的案例中,成功登录后初始化角色时唯一成功的 API 调用 (InvokeApiAsync) 如下:

user = (await client.InvokeApiAsync<User[]>("/.auth/me", HttpMethod.Get, null))?.FirstOrDefault();

我在这里缺少什么?为什么其他 API 调用失败并出现 401 代码?

如有任何帮助,我们将不胜感激。

最佳答案

我可以找出我面临的问题。在 MobileApp API - AuthorizeAttribute 的 OnAuthorizationAsync 方法中,我尝试从 AD 获取 API 调用请求的身份,但失败并出现错误,后跟此代码片段。

var principal = actionContext.RequestContext.Principal;
if (principal != null)
{
Thread.CurrentPrincipal = principal;
AzureActiveDirectoryCredentials identity;
try
{
identity = await principal.GetAppServiceIdentityAsync<AzureActiveDirectoryCredentials>(actionContext.Request);
}
catch (Exception ex)
{
logger.Error(ex, "Error while retrieving AD Identity");
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
......
}

GetAppServiceIdentityAsync 调用引发错误:

Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

对我有用的解决方案是将“最低 TLS 版本”从 1.2 更改为 1.0应用服务 --> 设置 --> SSL 设置

关于即使使用 MobileServiceClient - UWP 成功登录后,Azure MobileApp API 也会返回 401(未经授权),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51630234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com