小编And*_*son的帖子

ASP.NET Core Authorize属性不适用于JWT

我想在ASP.Net Core中实现基于JWT的安全性.我现在要做的就是在Authorization标题中读取持有者令牌,并根据我的标准验证它们.我不需要(也不想)包含ASP.Net Identity.事实上,我试图避免使用尽可能多的MVC添加的东西,除非我真的需要它们.

我创建了一个最小的项目,它演示了这个问题.要查看原始代码,只需查看编辑历史记录即可.我希望此示例拒绝所有/ api/icons请求,除非它们为AuthorizationHTTP标头提供相应的承载令牌.该示例实际上允许所有请求.

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Routing;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using System;
using Newtonsoft.Json.Serialization;

namespace JWTSecurity
{
    public class Startup
    {
        public IConfigurationRoot Configuration { get; set; }

        public Startup(IHostingEnvironment env)
        {
            IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath);
            Configuration = builder.Build();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddAuthentication();
            services.AddMvcCore().AddJsonFormatters(options => options.ContractResolver = new CamelCasePropertyNamesContractResolver());
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-webapi

24
推荐指数
3
解决办法
2万
查看次数

在IIS 7.5上运行ASP.NET Core时,日志在哪里?

我发布这个并回答它,因为这让我感到难过了很长时间.我的内容如下web.config:

<aspNetCore processPath="dotnet" arguments=".\XXX.Server.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
Run Code Online (Sandbox Code Playgroud)

显然,这应该是登录logs\stdout,但是当我看,那里什么也没有.我进行了一次疯狂的追逐,在整个磁盘上搜索任何名为'log'(返回太多)或'stdout'(没有返回任何内容)的东西,但仍然无法弄明白.

iis asp.net-core

16
推荐指数
3
解决办法
2万
查看次数

什么时候使用对称密钥签署 JWT 比非对称密钥更有用?

在我看来,JWT 的主要优点是任何客户端都可以阅读声明并验证您是生成它们的人。但是,如果您使用对称密钥来计算签名,那么客户端必须知道您的签名密钥才能验证 JWT,此时他们可以生成他们想要的任何声明。为什么有人会选择对称算法而不是非对称算法?

一位用户对另一个问题的回答是:

对称密钥只能以点对点的方式使用,因此接收者修改只有他和发送者拥有共享密钥的 JWT 是没有意义的

如果通信是点对点的,那么他们一定在某个时刻使用安全协议来交换密钥,那么在这种情况下 JWT 有什么用呢?

我问这个问题的原因是因为我见过的大多数在 ASP.Net 中实现基于 JWT 的安全性的示例都使用对称密钥。

encryption jwt

8
推荐指数
1
解决办法
2008
查看次数

Vulkan是否具有TransformFeedback等价物

Vulkan是否支持从管道阶段保存顶点输出?我一直在寻找,我找不到任何例子或参考,也许别人不知道?

vulkan

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

在Azure Logic App中反序列化ServiceBus内容

我正在尝试在Azure Logic App中阅读邮件的内容正文,但我没有取得多大成功.我看到很多建议说主体是base64编码的,建议使用以下代码进行解码:

@{json(base64ToString(triggerBody()?['ContentData']))}
Run Code Online (Sandbox Code Playgroud)

base64ToString(...)部分正在将内容正确解码为字符串,但该字符串似乎包含一个前缀,其中包含一些额外的序列化信息:

@string3http://schemas.microsoft.com/2003/10/Serialization/?3{"Foo":"Bar"}
Run Code Online (Sandbox Code Playgroud)

该字符串中还有一些额外的字符未在我的浏览器中显示.因此该json(...)函数不接受输入,而是给出错误.

InvalidTemplate.无法在第1行和第2451行的"HTTP"输入中处理模板语言表达式:'模板语言函数'json'参数无效.@string3http://schemas.microsoft.com/2003/10/Serialization/?3{"Foo":"bar" } 无法解析提供的值 :Unexpected character encountered while parsing value: @. Path '', line 0, position 0..有关使用详情,请参阅https://aka.ms/logicexpressions#json.'.

作为参考,使用.NET服务总线客户端将消息添加到主题中(客户端应该无关紧要,但这看起来更像C#-ish):

await TopicClient.SendAsync(new BrokeredMessage(JsonConvert.SerializeObject(item)));
Run Code Online (Sandbox Code Playgroud)

如何在Logic App中将其正确读取为JSON对象?

c# json servicebus azure-logic-apps

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

Vulkan结构中pNext的目的

Vulkan中使用的许多结构都有一个sType成员,用于标识结构的类型,以及一个pNext成员,用于特定于扩展的结构.这个答案很好地解释了sType成员的用途,以及为什么需要它.它简要介绍了pNext,虽然我不确定我理解它背后的基本原理.

如果每个结构的第一个成员都是sType,那么当扩展需要不同/额外的参数时,它们是否只能定义自己的结构类型?

vulkan

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

如果ServiceBus主题尚不存在,请创建它

Microsoft已更新其.NET ServiceBus客户端库,其文档目前分为旧的WindowsAzure.ServiceBus包和新的Microsoft.Azure.ServiceBus包.我喜欢新的包,因为它更清洁,依赖性更低.在旧包中,我们有如下方法:

if (!namespaceManager.TopicExists(topicName))
{
    var topic = new TopicDescription(topicName);
    namespaceManager.CreateTopic(topic);
}
Run Code Online (Sandbox Code Playgroud)

以编程方式创建主题的文档仍然使用旧包,其代码如上所述.这个NamespaceManager类在新包中不可用,那么我怎样才能达到相应的目的呢?

c# azure azureservicebus

5
推荐指数
3
解决办法
3799
查看次数

Vulkan DestroyInstance / DestroyDevice with VK_NULL_HANDLE

我的印象是你可以在 NULL 句柄上调用 Destroy / Free ,这将是一个空操作。

2.5.1 有效使用

将 VK_NULL_HANDLE 传递给任何 vkDestroy* 或 vkFree* 命令是有效的,它们将默默地忽略这些值。

但是如果你使用vkGetInstanceProcAddrvkGetDeviceProcAddr来获取函数指针会发生什么?我正在做以下事情:

Device::Device(Device&& other) :
    handle(other.handle),
    functions(other.functions)
{
    other.handle = VK_NULL_HANDLE;
}
Run Code Online (Sandbox Code Playgroud)

当然,当为原始设备调用析构函数时,它会将空句柄传递给特定于设备的vkDestroyDevice

目前,这给了我一个读取访问冲突,我不确定这是 AMD 的错、LunarG 的错还是我的错。

c++ vulkan

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

为什么Vulkan规范没有定义VkDeviceSize?

Vulkan规范(1.0.12)在2.4节中介绍了VkDeviceSize:

除了少数例外,Vulkan使用参数的标准C类型(来自stdint.h的int类型等).例外情况是使用VkResult作为返回值,使用VkBool32作为布尔值,使用VkDeviceSize作为与设备地址空间有关的大小和偏移,使用VkFlags作为传递预定义值的位或位组.

但是,它从未告诉我们VkDeviceSize的基本类型实际上是什么.我们怎么知道在VkDeviceSize和size_t之间转换是否安全?

从随SDK提供的标头中,我看到它是uint64_t的typedef.在未来的任何时候,这种情况有多大可能发生变化?

vulkan

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

为什么Entity Framework在一个SaveChanges()中添加多个项目这么慢?

这是前一个问题的后续跟进,我试图找出代码运行缓慢的主要原因.我想我已经把它缩小到下面的一个最小例子.我有一个基本的数据库结构如下:

public class Foo
{
    public int Id { get; set; }
    public string Bar { get; set; }
}

public class FooContext : DbContext
{
    public DbSet<Foo> Foos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个Foo对象列表,并希望将它们添加到数据库,建议的方法是使用AddRange().但是我注意到它花了很长时间,并且受到集合中项目数量的影响很小,即使是200这样的少量.所以我手动编写了它,并且中提琴,它运行得更快!

class Program
{
    static void Main(string[] args)
    {
        var foos = Enumerable.Range(0, 200).Select(index => new Foo { Bar = index.ToString() });

        // Make sure the timing doesn't include the first connection
        using (var context = new FooContext())
        {
            context.Database.Connection.Open(); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-6

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