Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将OAuth2作为Azure Appservice运行asp.net core 2应用程序会导致502个错误_Azure_Asp.net Core_Oauth 2.0_Azure Web App Service - Fatal编程技术网

将OAuth2作为Azure Appservice运行asp.net core 2应用程序会导致502个错误

将OAuth2作为Azure Appservice运行asp.net core 2应用程序会导致502个错误,azure,asp.net-core,oauth-2.0,azure-web-app-service,Azure,Asp.net Core,Oauth 2.0,Azure Web App Service,我使用Google的OAuth身份验证创建了一个简单的ASP.NET核心Web应用程序。我在本地机器上运行的很好。 然而,在将其作为AppService部署到Azure之后,OAuth重定向似乎变得一团糟 可以在此处找到应用程序本身: 下面是一个实际返回结果并显示应用程序正在运行的url: 有时,应用程序的响应很好,但一旦我尝试使用谷歌登录,它会一直加载,最终会返回以下消息: The specified CGI application encountered an error and the

我使用Google的OAuth身份验证创建了一个简单的ASP.NET核心Web应用程序。我在本地机器上运行的很好。 然而,在将其作为AppService部署到Azure之后,OAuth重定向似乎变得一团糟

可以在此处找到应用程序本身:

下面是一个实际返回结果并显示应用程序正在运行的url:

有时,应用程序的响应很好,但一旦我尝试使用谷歌登录,它会一直加载,最终会返回以下消息:

The specified CGI application encountered an error and the server terminated the process.
在幕后,身份验证回调似乎因502.3错误而失败:

502.3 Bad Gateway “The operation timed out”
可在此处找到错误跟踪:

微软的文档还没有真正起到作用。

进一步调查使我相信这与以下代码有关:

public GCalService(string clientId, string secret)
{
    string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json");

    var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets
        {
            ClientId = clientId,
            ClientSecret = secret
        },
        new[] {CalendarService.Scope.Calendar},
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;

    // Create Google Calendar API service.
    _service = new CalendarService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "gcalworkshift"
    });
}
我可以想象Azure不支持个人文件夹吗?谷歌搜索这方面的信息并不能告诉我多少。

我随后使用谷歌身份验证创建了一个ASP.NET核心Web应用程序来检查这个问题

我还遵循和构建了我的示例项目。以下是核心代码,您可以参考它们:

Startup.cs

公共类启动
{
public readonly IDataStore dataStore=new FileDataStore(GoogleWebAuthorizationBroker.Folder);/C:\Users\{username}\AppData\Roaming\Google.api.Auth
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
services.AddDbContext

Azure Web应用程序运行在一个称为沙箱的安全环境中,该环境有一些限制,您可以遵循一些详细信息

此外,您还提到了提供内置身份验证而不在代码中添加任何代码的。由于您已在web应用程序中编写了用于身份验证的代码,因此您无需设置应用程序服务身份验证


对于使用应用程序服务身份验证,您可以按照进行配置,然后您的NetCore后端可以获得其他用户详细信息(
访问\u令牌
刷新\u令牌
,等等)通过HTTP访问
/.auth/me
端点,您可以了解类似的详细信息。在检索到登录用户的令牌响应后,您可以手动构建
用户凭据
,然后构建
日历服务

哇,感谢您的详细调查布鲁斯!我会看看是否建议您使用im实现对我来说很有用,然后发回!所以我更改了代码以使用您建议的文件数据存储,现在一切都很好。谢谢您的帮助!