我正在尝试使用oauth来促进与asp.net核心应用程序的集成以及在Azure DevOps中记录错误。 我遵循了指南: https ://docs.microsoft.com/zh-cn/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops使用asp.net core 3.0中间件来配置oauth。

当我点击标记为[Authorize]的页面时,它会正确地将我重定向到具有我请求的范围的devops auth页面,但是当我进行授权时,它会将我重定向回我的服务器,但出现错误:

{“错误”:“ invalid_client”,“ ErrorDescription”:“无效的客户端身份验证令牌。”}

我已经确认我在配置中使用了正确的端点和正确的客户端密码。

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = "ado";
        })
    .AddCookie()
    .AddOAuth("ado", options =>
    {
        options.ClientId = "[AppId from devops]";
        options.ClientSecret = "[Client Secret from devops]";
        options.CallbackPath = new PathString("/signin-ado");

        options.AuthorizationEndpoint = "https://app.vssps.visualstudio.com/oauth2/authorize";
        options.TokenEndpoint = "https://app.vssps.visualstudio.com/oauth2/token";

        options.Scope.Add("vso.identity");
        options.Scope.Add("vso.work_full");

        options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "UserId");
        options.ClaimActions.MapJsonKey(ClaimTypes.Email, "EmailAddress", ClaimValueTypes.Email);
        options.ClaimActions.MapJsonKey(ClaimTypes.Name, "Name");
    });

        services.AddControllersWithViews();

配置:

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });

我发现将oAuth与devops结合使用的示例来自Asp.Net Webforms,Asp.net核心有哪些?

(这是完整的错误)

An unhandled exception occurred while processing the request.
Exception: OAuth token endpoint failure: Status: BadRequest;Headers: Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
P3P: CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT"
Set-Cookie: VstsSession=%7B%22PersistentSessionId%22%3A%22f8e30b87-a6eb-470d-9ea2-ddf7b1f0dd84%22%2C%22PendingAuthenticationSessionId%22%3A%2200000000-0000-0000-0000-000000000000%22%2C%22CurrentAuthenticationSessionId%22%3A%2200000000-0000-0000-0000-000000000000%22%7D; domain=.visualstudio.com; expires=Mon, 16-Sep-2024 22:38:25 GMT; path=/; secure; HttpOnly
X-TFS-ProcessId: 98486e68-ccc8-4bc2-9907-f44cec26922a
Strict-Transport-Security: max-age=31536000; includeSubDomains
ActivityId: b0088e1b-d2d0-4788-8328-d97aeeecb447
X-TFS-Session: b0088e1b-d2d0-4788-8328-d97aeeecb447
X-VSS-E2EID: b0088e1b-d2d0-4788-8328-d97aeeecb447
Request-Context: appId=cid-v1:20b3930f-73dc-453a-b660-e3891d782eef
Access-Control-Expose-Headers: Request-Context
X-Content-Type-Options: nosniff
X-MSEdge-Ref: Ref A: 9DC5A709B96D4D838858E4FC56797DE4 Ref B: WSTEDGE1017 Ref C: 2019-09-18T22:38:25Z
Date: Wed, 18 Sep 2019 22:38:24 GMT
;Body: {"Error":"invalid_client","ErrorDescription":"Invalid client auth token."};
Unknown location

Exception: An error was encountered while handling the remote login.
Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler<TOptions>.HandleRequestAsync()

#1楼 票数:0

如果您的授权代码发布是通过url编码的查询字符串完成的,则可以尝试通过请求正文来完成它。 您可以在此处参考示例。

#2楼 票数:0

问题在于,在OAuthHandler中用于交换令牌的授权代码的参数与在Azure devops auth示例中使用的参数不同。

https://github.com/aspnet/AspNetCore/blob/master/src/Security/Authentication/OAuth/src/OAuthHandler.cs ,第179行

https://github.com/microsoft/azure-devops-auth-samples/blob/master/OAuthWebSample/OAuthWebSample/Controllers/OAuthController.cs ,第74行

您可以通过创建自己的处理程序来解决此问题,该处理程序继承自OAuthHandler并重写ExchangeCodeAsync方法以使用示例中的参数。

  ask by ScottFoster1000 translate from so

未解决问题?本站智能推荐:

1回复

使用用户提供的oauth2凭据配置asp.net核心身份oauth2身份验证

我构建了一个扩展 gitlab 用户体验的应用程序,组织的管理员(组织是系统中的租户)可以配置他们的 gitlab 安装(在他们的 gitlab 实例中注册一个 OAuth2 应用程序),组织中的普通用户可以通过他们通过 OAuth2 的 gitlab 帐户。 我目前的问题是,凭据(oauth2 客
1回复

在Azure中部署ASP.net核心应用程序时,AzureAD的400id令牌无效

我主持在Azure中我的ASP.net核心的web应用程序,我使用Azure的AD授权如图读取角色这里。 我在托管应用程序中收到 400 个无效的 id 令牌用于回调。 在 Chrome 控制台中,我只看到此错误消息。我也可以在网络选项卡的回调中看到 id_token。 但是,如果我在将重定向 ur
2回复

设置azure-pipelines.yml“目录'/home/vsts/work/1/a'为空。”使用ASP.NET核心

我非常需要帮助来创建我的 yml 构建文件,因为我在任何地方都找不到任何好的教程、示例或其他帮助之王。 我总是收到类似的错误:看到警告,我的构建工件似乎总是空的。 所有步骤都成功,但我无法部署,因为找不到我的文件。 愚蠢的。 这是我的管道定义 请注意我评论的第 2 行 实际上是默认脚本的一部分。 我
1回复

没有ASP.NET标识的.NET核心外部身份验证

我使用自己的JWT令牌身份验证,而不是使用默认模板免费提供的asp.net身份。 我到处寻找有关如何在没有asp.net身份的情况下实现外部身份验证的文档/指导,但所有文章都是针对asp.net身份验证的。 我已设法将用户重定向到谷歌登录页面(使用ChallengeResult),但当提供
2回复

如何将.net核心WebJob与asp.net核心Web应用程序一起发布?

我有两个网络核心控制台应用程序,我使用visual studio作为Web作业部署到Azure。 当我单独发布它时,它运行良好。 如何使用Web应用程序发布.net核心webjobs togeter? 我尝试过创建webproject/properties/webjob-list.j
2回复

ASP.NET核心集成测试在本地工作,但在生产环境中运行时会抛出空引用异常

我有一个ASP.NET Core 2.2 Razor Pages Web应用程序,我已经编写了一些集成测试,以遵循官方指南 。 我可以使用dotnet test或Visual Studio中内置的测试运行程序在本地运行dotnet test 。 但是,在构建服务器(Azure DevOps
1回复

ASP.Net核心Google身份验证

我的.net核心web api应用程序上的google身份验证有问题。 我的用例很简单,从授权标题中的google put token获取bearer token作为“Bearer {token}”并调用我的web api。 但我不能让它发挥作用。 我从以下网址获取谷歌令牌后: htt
2回复

如何在dockerfile中更新asp.net核心版本

我正在构建一个docker容器,作为Azure DevOps管道中的一个步骤,并使用提供的构建池。 当我尝试运行容器时,我收到以下错误。 我知道我需要在构建容器时更新asp.net版本,并且我正在寻找可以添加到我的Dockerfile的命令行来执行此操作。 我发现有很多地方可以下载正确的