小编Nan*_* Yu的帖子

Bearer error="invalid_token", error_description="发行人无效"

我有一个简单的 Web api 项目,如下所示:

[Authorize]
        [Route("Get")]
        public ActionResult<string> SayHello()
        {
            return "Hello World";
        }
Run Code Online (Sandbox Code Playgroud)

我正在尝试用邮递员测试它。按照此处的步骤操作:https://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-testing-your-authorization-server-with-postman/

1) 发送以下请求并按预期接收令牌:

在此输入图像描述

2) 尝试使用授权令牌发送另一个请求,如下所示:

在此输入图像描述

为什么我会收到 401(未经授权)错误?WWW-Authenticate 响应标头显示:Bearer error="invalid_token", error_description="The Issuer is invalid"。我正在使用.Net Core 3.1。我已经把截图中的敏感信息注释掉了。

从 MVC 应用程序访问时,Web api 按预期工作。

这是启动代码:

services.AddAuthentication("Bearer")
                .AddIdentityServerAuthentication(options =>
                {
                    options.Authority = identityUrl; //identityurl is a config item
                    options.RequireHttpsMetadata = false;
                    options.ApiName = apiName;

                });
Run Code Online (Sandbox Code Playgroud)

c# postman .net-core asp.net-core identityserver4

13
推荐指数
3
解决办法
4万
查看次数

如何从控制器返回 JavaScript?

我正在使用 ASP.NET Core 2.2 项目,我需要从控制器返回 JavaScript。但是,我怀疑没有直接的方法,因此,我遵循了这个OS answer 并将我的代码更改为如下:

public IActionResult MyAction()
{
    var sb = new StringBuilder();
    sb.Append("$(document).ready(function(){");
    sb.Append("alert('hi')");
    sb.Append("});");            
    return new JavaScriptResult(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud)
public class JavaScriptResult : ContentResult
{
    public JavaScriptResult(string script)
    {
        this.Content = script;
        this.ContentType = "application/javascript";
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然它只是写纯文本。有办法吗?

javascript c# asp.net-core asp.net-core-2.2

7
推荐指数
1
解决办法
4422
查看次数

Azure 注销重定向 (post_logout_redirect_uri) 不起作用

完成注销后,Azure 注销页面不会重定向用户。它只返回这条消息:

您已退出帐户。关闭所有浏览器窗口是个好主意。

我尝试了不同的注销 URL:

但它们根本不起作用。

唯一奇怪的是,如果我检查 DevTools 上的“网络”选项卡,页面似乎正在加载重定向的网站内容,但没有在浏览器上显示它。

redirect azure azure-active-directory

6
推荐指数
1
解决办法
9503
查看次数

appsettings.json 中的 ClientSecret 与 IdentityServer4

我正在尝试让 IdentityServer4 使用 appsettings.json 指定混合授权类型的客户端密钥。

本文末尾说,如果我想将密钥放入 appsettings.json 中,我需要对其进行 sha256 哈希,然后对密钥进行 Base64 编码。因此,将秘密“秘密”放入https://emn178.github.io/online-tools/sha256.html中,得到“2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b”,其base64编码为“MmJiODBkNTM3YjFkYTNlMzhiZDM” wMzYxYWE4NTU2ODZiZGUwZWFjZDcxNjJmZWY2YTI1ZmU5N2JmNTI3YTI1Yg==”。这使得我的 mvc 客户端的 appsettings.json 看起来像这样

{
    ...
    "ClientSecrets": [ { 
        "Value": "MkJCODBENTM3QjFEQTNFMzhCRDMwMzYxQUE4NTU2ODZCREUwRUFDRDcxNjJGRUY2QTI1RkU5N0JGNTI3QTI1Qg=="
    } ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

在 MVC 客户端上,配置如下所示

.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Authority = Configuration["OpenIdConnectAuthority"];

    options.ClientId = "xxx-mvc";
    options.ClientSecret = "secret";

    options.RemoteAuthenticationTimeout = TimeSpan.FromHours(2);
    options.ResponseType = "code id_token";
    options.RequireHttpsMetadata = !Environment.IsDevelopment();
    options.Scope.Clear();
    options.Scope.Add("openid profile");

    options.CallbackPath = new PathString("/signin-callback-oidc");
    options.SignedOutCallbackPath = new PathString("/signout-callback-oidc");
    options.SignedOutRedirectUri = new PathString("/");
    options.ClaimsIssuer = OpenIdConnectDefaults.AuthenticationScheme;

    options.TokenValidationParameters = new TokenValidationParameters
    { …
Run Code Online (Sandbox Code Playgroud)

asp.net-core identityserver4

6
推荐指数
2
解决办法
8089
查看次数

Azure OAuth登录 - 工作正常,现在收到AADSTS700022/AADSTS700023错误

我们已经登录办公室365登陆我们的网站工作了几个月,突然间,它已经坏了.

截至今天上午(英国时间),我们开始收到"AADSTS700023:使用提供的授权码请求访问令牌时,输入参数范围的提供值不能为空.请指定有效范围." 我们通过https://login.microsoftonline.com/common/oauth2/v2.0/token请求令牌时出现错误

看看文档看来,范围是必需的并且没有被传递,所以无论它工作了几个月,我都添加了它.现在我得到了一个不同的错误..

AADSTS700022:输入参数范围的提供值无效,因为它包含多个资源.范围https://outlook.office.com/mail.send mail.readwrite calendars.readwrite tasks.readwrite contacts.readwrite openid profile offline_access无效.

当我们首先调用授权端点时,这是传递的范围,并且从该调用返回时很好,但是当我们尝试获取令牌时它会失败.

目前是否存在针对365的常见登录问题,或者是否存在我做错的事情以及微软决定"修复"他们的结局?

login azure azure-active-directory office365api

5
推荐指数
1
解决办法
2184
查看次数

.net core 中使用 Open Id Connect 和本地数据库的混合身份验证

是否有一种模式可以设计一个能够使用 Open Id Connect(在 Azure AD 中连接)和本地数据库对用户进行身份验证的应用程序?

我正在创建的应用程序的用户来自拥有 Azure Active Directory 的公司,但也有非该公司雇用的用户,这些用户必须使用该应用程序,因为他们未在 Azure AD 中注册。

不使用 Azure AD 的身份验证方法应使用本地数据库,而不是其他身份验证提供程序。

.net azure-active-directory openid-connect .net-core asp.net-core

5
推荐指数
1
解决办法
2126
查看次数

从访问令牌 WebApi Asp.net Core 获取用户信息

我正在使用 dotnet-core3-preview 中的新 ASP.NET Core Identity API Authorization,文档位于https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity- api-authorization?view=aspnetcore-3.0

我成功地运行了典型的登录过程,并且在不记名令牌中设置并发送了令牌。但是现在我有一个 api 端点,它应该从数据库中返回一些用户详细信息,所以我试图从令牌中提取用户 ID 来查询数据库。

但是,根据我下面的屏幕截图,我无法在任何声明中找到 id,我该如何实现?

在此处输入图片说明

        [HttpGet]
        [Authorize]
        public async Task<IActionResult> GetUserByToken(){


            var ls = User.Claims.AsQueryable();
            return Ok(ls);

        }
Run Code Online (Sandbox Code Playgroud)

asp.net-core identityserver4 asp.net-core-identity

5
推荐指数
1
解决办法
4848
查看次数

使用客户端凭据从 Azure AD 获取访问令牌以进行本机应用程序注册 (PowerBI)

我使用 adal4j(版本 1.2.0)从后端应用程序获取访问令牌,以便能够使用 PowerBI REST API 嵌入报告(更具体地说,是GenerateToken 方法)。我已在 Azure 中注册了一个本机应用程序,并为其提供了必要的权限。我可以使用用户名/密码组合获取访问令牌,如下所示:

AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/TENANT_ID/oauth2/authorize", false, es);
Future<AuthenticationResult> f = ac.acquireToken("https://analysis.windows.net/powerbi/api", CLIENT_ID, USERNAME, PASSWORD, null);
Run Code Online (Sandbox Code Playgroud)

然后使用令牌成功对 API 进行身份验证,并最终显示嵌入的报告。但是,就我而言,我当然希望使用客户端凭据(客户端 ID、客户端密钥)而不是用户帐户。我可以再次获取令牌,如下所示:

AuthenticationContext("https://login.windows.net/TENANT_ID/oauth2/authorize", false, es);
ClientCredential cc = new ClientCredential(CLIENT_ID, CLIENT_SECRET);
Future<AuthenticationResult> f = ac.acquireToken("https://analysis.windows.net/powerbi/api", cc,null);
Run Code Online (Sandbox Code Playgroud)

客户端 ID 是注册的本机应用程序的应用程序 ID,客户端密钥是通过向应用程序添加密钥来定义的。我再次获得了令牌,但现在我无法再使用它对 API 进行身份验证(HTTP 403,没有任何进一步的详细信息)。

所以我的问题是,这是一个应该首先工作的有效场景,和/或者我是否只是缺少 Azure 或使用 adal4j 的技术信息?

编辑:下面是委派应用程序权限的屏幕截图。

在此输入图像描述

authentication azure azure-active-directory powerbi adal4j

4
推荐指数
1
解决办法
3673
查看次数

使用 .net core React 模板修改 oidc-client 的登录/登录 UI

使用 vscode 或 VS2019 与 .net core 3.1,我使用身份验证人员创建了新项目

使用此命令dotnet new react --auth Individual 需要更改登录屏幕 UI 我找不到登录组件 UI 的任何 UI

有什么方法可以更改或修改登录、注册或用户配置文件 UI 吗?

reactjs asp.net-core identityserver4 oidc-client .net-core-3.1

4
推荐指数
1
解决办法
3467
查看次数

识别 SPA 和 .NET Core 3 的角色

我有一个使用 .NET Core 3.1 的应用程序,还有一个使用默认 React 应用程序的前端,从这个链接生成。

在 .NET Core 应用程序中,我使用用户和角色设置了 Identity Server。

当我在 React 应用程序中时,我想知道用户的角色。我看到目前正在使用一个名为oidc-client.

从我在授权用户时可以调试的响应中,我看到有一些范围被返回。

scope: "openid profile [Name of the app]"

这是完整的回应。

在此处输入图片说明

我如何知道该用户的角色?我是否需要将它添加到我的 .NET Core 应用程序中?或者我可以从access_token响应中找出它吗?

single-page-application reactjs .net-core asp.net-core .net-core-3.0

4
推荐指数
1
解决办法
749
查看次数