将OAuth2作为Azure Appservice运行asp.net core 2应用程序会导致502个错误
我使用Google的OAuth身份验证创建了一个简单的ASP.NET核心Web应用程序。我在本地机器上运行的很好。 然而,在将其作为AppService部署到Azure之后,OAuth重定向似乎变得一团糟 可以在此处找到应用程序本身:将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
下面是一个实际返回结果并显示应用程序正在运行的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实现对我来说很有用,然后发回!所以我更改了代码以使用您建议的文件数据存储,现在一切都很好。谢谢您的帮助!