当前位置: 首页 > 知识库问答 >
问题:

ASP.NET核心blazor webassembly正在获取Identity Server 4 Postman测试的令牌

赏航
2023-03-14

这会导致邮递员浏览器模拟器弹出并且永远不会完成。

这个失败了,但是我得到了更详细的错误信息。AspNetCore . Authorization . defaultauthorizationservice[2]授权失败。未满足这些要求:DenyAnonymousAuthorizationRequirement:需要经过身份验证的用户。

然而,当我尝试使用默认的测试用户名和密码时,我得到了< code > Error:unauthorized _ client

在本文中,我使用API授权选项而不是配置文件服务选项(我正在本地开发,而不是使用azure。)我需要做什么才能获得令牌?我很感激你的帮助,谢谢。

编辑:尝试在配置服务中添加新客户端,但邮递员浏览器模拟器弹出并永远不会完成相同的行为。

services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options => {
                    options.IdentityResources["openid"].UserClaims.Add("name");
                    options.ApiResources.Single().UserClaims.Add("name");
                    options.IdentityResources["openid"].UserClaims.Add("role");
                    options.ApiResources.Single().UserClaims.Add("role");
                    options.Clients.Add(new IdentityServer4.Models.Client()
                    {
                        ClientId = "postman",

                        AllowedGrantTypes = GrantTypes.Code,
                        AllowOfflineAccess = true,
                        ClientSecrets = { new Secret("secret".Sha256()) },

                        RedirectUris = { "http://localhost:21402/signin-oidc", "https://oauth.pstmn.io/v1/browser-callback" },
                        PostLogoutRedirectUris = { "http://localhost:21402/" },
                        FrontChannelLogoutUri = "http://localhost:21402/signout-oidc",

                        AllowedScopes =
                        {
                            IdentityServerConstants.StandardScopes.OpenId,
                            IdentityServerConstants.StandardScopes.Profile,
                            IdentityServerConstants.StandardScopes.Email,

                            "Onero.ServerAPI"
                        },
                    });
                });

共有2个答案

东门深
2023-03-14

经过几天的阅读文档和博客以获得整体图片,我终于能够做到这一点!我所做的是以下内容:

仔细查看了启动我的服务器项目的输出,这就是我看到以下内容的地方:

这让我意识到,我在Postman中使用了错误的endpoint作为AuthURL。所以我把它改为https://localhost:5001/connect/authorize。然后我在Postman中使用了这个配置

结合在服务器的启动中添加Postman客户端。cs文件

 services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options => {
                    ...
                    options.Clients.Add(new IdentityServer4.Models.Client()
                    {
                        ClientId = "Postman",

                        AllowedGrantTypes = GrantTypes.Code,
                        AllowOfflineAccess = true,
                        ClientSecrets = { new Secret("secret".Sha256()) },

                        RedirectUris = { "http://localhost:21402/signin-oidc", "https://oauth.pstmn.io/v1/browser-callback" },
                        PostLogoutRedirectUris = { "http://localhost:21402/" },
                        FrontChannelLogoutUri = "http://localhost:21402/signout-oidc",
                        AllowedScopes =
                        {
                            "Onero.ServerAPI"
                        },
                    });;
                });

这终于弹出了那个小邮递员页面,把我带到默认的身份服务器AuthUI页面,用我的默认用户登录,然后我们去了,终于得到了的令牌。

最大的收获:确保读取服务器输出,以确保endpoint正确,从而可以正确填写Postman中的参数。

谢谢你的帮助!

冯宏放
2023-03-14

如果您使用授权码授权,请将此URL用作回拨URL,并取消选中使用浏览器授权。您还需要将该URL添加到应用程序的< code>RedirectUris列表中。

https://oauth.pstmn.io/v1/browser-callback

此页面只是向身份验证弹出窗口(即邮递员窗口)的父级发布消息

<script>
    let data = {
        isAuthCallback: true,
        queryString: window.location.search || '',
        hash: window.location.hash || ''
    };

    window.opener.postMessage(data, '*');
</script>

如果你不想允许此 URL(你可能想要保护令牌免受第三方的攻击),则可以在应用中托管此页面。

[HttpGet("postman-callback")]
public IActionResult PostmanCallback()
{
    return new ContentResult {
        ContentType = "text/html",
        StatusCode = 200,
        Content = @"
<html><body><script>
let data = {
    isAuthCallback: true,
    queryString: window.location.search || '',
    hash: window.location.hash || ''
};

window.opener.postMessage(data, '*');
</script></body></html>"
    };
}
 类似资料:
  • 在我的asp.net核心项目(与2017年相比)中,我想运行我的测试方法,但在测试资源管理器中单击“运行所有”,我在测试资源管理器控制台中得到“最后一次测试运行不运行(总运行时间“布拉布拉”)”响应。我已经下载了我的NunitNuGet包。我认为在我的启动类或其他地方asp.net核心中测试有一些缺失的测试配置,或者一些缺失的NuGet包:/Thx提前给每个人。 这是我的测试课: 下面是我的“Gu

  • .NET核心和ASP.NET核心到底有什么区别?

  • 我正在尝试将ASP.NET MVC webform迁移到ASP.NET核心MVC。当前,类遇到问题。 原来的行是: 但是,对于ASP.NET核心,UrlReferrer不可用。我发现了以下内容: 它返回StringValues而不是String。我不确定我是否应该尝试使用这一个,或者是否有任何其他解决办法来解决这种情况。也不可用,或者我没有该命名空间。我的命名空间如下: 如果有人能指引我正确的方向

  • 我正在使用ASP.NET内核。我正在创建一个基本的WebAPI。我想在出现问题时显示一个JSON错误。 打印屏幕在我的屏幕上显示want I want。唯一的问题是它的发送状态码为200。 我可以通过这样做来解决问题: 真诚的,布莱希特

  • 我正在使用ASP.Net核心开发一个网络应用编程接口。我正在对我的项目进行集成测试。我点击这个链接,https://koukia.ca/integration-testing-in-asp-net-core-2-0-51d14ede3968.这是我的代码。 我有控制器要在古德.api项目中进行测试。 我在解决方案中添加了一个名为thegoodyard.tests的新单元测试项目。我添加了一个具有以