我有一个简单的 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) 我正在使用 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)
虽然它只是写纯文本。有办法吗?
完成注销后,Azure 注销页面不会重定向用户。它只返回这条消息:
您已退出帐户。关闭所有浏览器窗口是个好主意。
我尝试了不同的注销 URL:
但它们根本不起作用。
唯一奇怪的是,如果我检查 DevTools 上的“网络”选项卡,页面似乎正在加载重定向的网站内容,但没有在浏览器上显示它。
我正在尝试让 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) 我们已经登录办公室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的常见登录问题,或者是否存在我做错的事情以及微软决定"修复"他们的结局?
是否有一种模式可以设计一个能够使用 Open Id Connect(在 Azure AD 中连接)和本地数据库对用户进行身份验证的应用程序?
我正在创建的应用程序的用户来自拥有 Azure Active Directory 的公司,但也有非该公司雇用的用户,这些用户必须使用该应用程序,因为他们未在 Azure AD 中注册。
不使用 Azure AD 的身份验证方法应使用本地数据库,而不是其他身份验证提供程序。
.net azure-active-directory openid-connect .net-core 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) 我使用 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 的技术信息?
编辑:下面是委派应用程序权限的屏幕截图。
使用 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
我有一个使用 .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
asp.net-core ×7
.net-core ×3
azure ×3
c# ×2
reactjs ×2
.net ×1
adal4j ×1
javascript ×1
login ×1
office365api ×1
oidc-client ×1
postman ×1
powerbi ×1
redirect ×1