小编Mat*_*zer的帖子

RESTful身份验证.客户端,无状态的未认证

我正在为一些开发实现一组RESTful服务,其中一个是身份验证服务.

身份验证服务验证两种身份:

  • 应用.基于AppKey的身份验证,因此客户端必须注册密钥才能访问其余服务.
  • 用户.众所周知的凭证(用户+密码)为基础的用户身份验证,因此人和机器可以通过客户端应用程序使用这些RESTful服务.

这些RESTful服务无状态的.

当客户端应用程序针对身份验证服务进行身份验证时,或者人或机器使用凭据进行身份验证时,两个操作分别生成AppTokenUserToken.

这些令牌是盐渍哈希,因此对RESTful基础架构的后续请求将在不共享AppKeys凭据的情况下进行身份验证.

从完全无状态方法的角度来看,这些令牌不应存储在服务层中的任何位置,而应存储在某种客户端状态(fe,Web客户端将使用HTTP cookie存储它).这就是我目前的实现方式.

因为使用这些令牌重新验证每个请求并让服务层接收来自客户端的令牌,所以它可以比较来自客户端的令牌,检查它是否是在服务层重新生成它的有效令牌并与之比较一个客户拥有的太贵了,我已经实现了一个服务层AppTokenUserToken,它们都有一个过期日期和一个所有者(为其创建了令牌的应用程序或用户),以便检查令牌来自客户端的存在于令牌存储中.

客户如何以交互方式取消身份验证? 只是放弃客户端安全状态.如果它是Web客户端,它会丢弃身份验证cookie并只刷新页面,客户端将检测不到身份验证cookie,并且用户将被重定向到登录页面.

从RESTful服务的角度来看,这是一种无状态的身份验证:客户端不了解具有服务层伪身份验证状态的技巧.它只是一个服务实现细节 - 性能优化 - .

我不打算列出无状态服务的优点,因为我绝对相信这种方法是可行的方法,但我发现了一个问题:无状态身份验证/取消身份验证意味着客户端不会通知服务器他们关闭会话因此安全商店以大量无用的记录结束.

如果服务客户端的会话时间有限(fe,1小时,3小时,一天......),那么这不是一个大问题,但如果用户必须永久验证(8个月,一年)会发生什么). …

.net authentication rest c#-5.0 .net-4.5

5
推荐指数
2
解决办法
1423
查看次数

WinRT,Javascript和随机的"拒绝访问"异常

一些背景

在过去的几天里,我一直在开发一些Windows 8 HTML5/WinJS应用程序.此应用程序使用WinRT组件完成一些工作.

JavaScript部分与整个WinRT组件协作启动异步操作:回调函数由JavaScript提供,WinRT在有异步结果时调用它.

我忘了提到整个Windows 8应用程序不是使用单页面方法开发的.

问题

如果在某个页面中调用整个异步操作而您没有导航到其他页面,则一切都按预期工作.

但是,当您导航到其他页面时会发生什么?当WinRT组件需要通知JavaScript部分有关异步操作的结果时:ACCESS DENIED EXCEPTION!你的应用程序崩溃了.

到目前为止我尝试过的

  • 整个WinRT组件方法返回一个IAsyncOperation<T>:在导航到其他页面之前,我.cancel()在JavaScript => NO LUCK中调用该方法
  • 我已经把回调函数放进WinJS.Application.sessionState去,以确保整个函数不被垃圾收集器破坏=> NO LUCK

问题......

我是否有机会通知WinRT组件取消它的异步操作并且不尝试将控件返回到JavaScript回调?

提前致谢

您可以检查其他人之前是否发现了同样的问题:

.net windows windows-8 windows-runtime winjs

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

如何覆盖常量派生类?

代码:

public class A {
    public const int beingSupportedRate = 0;
}

 public partial class B : A {
    public const int beingSupportedRate = 1;

}
Run Code Online (Sandbox Code Playgroud)

因为性能,我希望它像const int一样明确.将虚拟放在class A变量前面beingSupportedRate会导致编译器错误:

The modifier 'virtual' is not valid for this item

c#

5
推荐指数
4
解决办法
5784
查看次数

当成员数量在运行时未知时,如何使用 Lua 向 Redis 集提供多个成员?

例如,可以使用以下命令将多个成员添加到Redis 中的某个集合sadd

sadd myset 38 484 2 92 1
Run Code Online (Sandbox Code Playgroud)

在 Lua 中,我发现我可以执行如下相同的操作:

redis.call("SADD", "myset", "38", "484", "2", "92", "1")
Run Code Online (Sandbox Code Playgroud)

但是,当调用者不知道将提供多少参数时会发生sadd什么?

在 JavaScript 中,有一个Function.apply(...)函数可以让我们以数组的形式提供参数:

 // Source function would look like this: function X(a, b, c) { ... }
 X.apply(this, [38, 484, 2]);
Run Code Online (Sandbox Code Playgroud)

如何在 Lua 和 Redis 中实现相同的目标?

lua arguments set redis

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

ASP.NET WebAPI中的依赖注入:IHttpControllerActivator与IDependencyResolver

最近我遇到了这个讨论.

在ASP.NET WebAPI中,当我们需要集成控件/依赖注入容器的自定义反转时,我们需要采用两种不同的策略:

  1. 实现IHttpControllerActivator,这是一个完全控制控制器生命周期的扩展点.也就是说,我们可以定义控制器的实例化方式.此时,我们可以使用控件容器的反转来解析控制器,并让它使用自己的依赖注入方法.

  2. 实现IDependencyResolver,我们可以在其中定义如何解决依赖注入.

在我目前的项目中,我IHttpControllerActivator顺便说一句,因为我使用Castle Windsor作为控制容器的反转,我可以从容器配置中完全控制对象生命周期,我可以决定如何解析控制器,以及递归的范围注入的依赖关系定义一旦控制器结束其生命(即请求结束时)它们就会死亡.

虽然这些功能中的一些可以通过实现来IDependencyResolver实现,但我觉得这IHttpControllerActivator是在ASP.NET Web API中集成控件和依赖注入的反转的最佳方式,因为我相信我更喜欢保持尽可能抽象并坚持使用Castle Windsor在控制和依赖注入的反转方面的配置模型.

这种IHttpControllerActivator方法的主要缺点是你需要在容器中注册所有控制器,同时IDependencyResolver仍然负责将控制器解析为ASP.NET Web API管道(对我来说,这不是一个大问题,我只是使用Castle Windsor的Classes.FromAssembly配置所有控制器派生ApiController).

我是否会忽略任何其他可能使该IDependencyResolver方法更合适的缺点?

.net c# asp.net dependency-injection asp.net-web-api

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

FP方式的数组嵌套映射

给定以下数组:

const array1 = ["a1", "b1", "c1", "d1"],
      array2 = ["a2", "b2"],
      array3 = ["a3", "b3", "c3"]
Run Code Online (Sandbox Code Playgroud)

是否有任何ramda函数来简化我可以给出一个或多个数组的以下场景?

const nestedMap = map => {
    const result = []

    for(let item1 of array1) 
        for(let item2 of array2)
            for(let item3 of array3)
                    result.push(map(item1, item2, item3))
    return result
}
Run Code Online (Sandbox Code Playgroud)

整个功能如下:

// Sample usage
nestedMap((item1, item2, item3) => `${item1} ${item2} ${item3}`, array1, array2, array3)
Run Code Online (Sandbox Code Playgroud)

我希望避免重新发明轮子.

注意:Vanilla javascript或任何其他库都可以接受.我最初谈到ramda,因为它有很多功能,也许我错过了哪些可以帮助解决这个问题

javascript arrays functional-programming ramda.js

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

按坐标提取PDF文本

我想知道Microsoft .NET中是否有一些PDF库可以通过给出坐标来提取文本.

例如(伪代码):

PdfReader reader = new PdfReader();
reader.Load("file.pdf");

// Top, bottom, left, right in pixels or any other unit
string wholeText = reader.GetText(100, 150, 20, 50);
Run Code Online (Sandbox Code Playgroud)

我试图使用PDFBox for .NET(那个在IKVM之上工作)没有运气,这似乎是非常过时和无证的.

也许任何人都有使用PDFBox,iTextSharp或任何其他开源库的良好样本,他/她可以给我一个提示.

先感谢您.

c# pdf .net-4.0

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

VB.NET下的后期绑定魔术转换为C#

我应该将一些代码从VB转换为C#.给出以下VB工作行(我认为仅因为选项未设置为严格):

Dim someProp As SomeType
Try
    someProp = CType(SomeInstance, Object).SomeProp 
    ' ...
Run Code Online (Sandbox Code Playgroud)

由于后期绑定,这个代码在VB下是可能的.当然,以下内容不适用于C#:

SomeType someProp;
try
{
    someProp = ((object)SomeInstance).SomeProp;
    // ...
Run Code Online (Sandbox Code Playgroud)

我怎么能在C#下制定类似的东西呢?

任何tipps sl3dg3的thx

c# vb.net c#-4.0

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

由于NuGet版本不正确,TFS Build 2015失败,即使构建计算机中存在所需的NuGet版本

我正在使用新的脚本系统配置TFS 2015构建.在构建期间,当NuGet重新编译某些包时,它会因以下错误而失败:

'System.Collections 4.0.10'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Diagnostics.Debug 4.0.10'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Globalization 4.0.10'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Linq 4.0.0'软件包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Resources.ResourceManager 4.0.0'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Runtime 4.0.20'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Runtime.Extensions 4.0.10'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

'System.Threading 4.0.10'包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本是'2.8.60318.667'.

顺便说一下,我已经在整个构建机器中安装了Visual Studio 2015,并且我已经检查了扩展管理器菜单中是否存在NuGet 3.1.

我想TFS Build正在使用不同的NuGet安装位置,但我无法弄清楚它在哪里寻找它以及如何将它从2.8.x更新到3.x.

tfs tfsbuild visual-studio nuget tfs-2015

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

两个不同的OWIN应用程序可以授权OAuth2承载访问令牌吗?

我有两个Web API:

  • Identity API.它实现身份验证,用户注册和OAuth客户端注册和身份验证.
  • 产品API.一组RESTful API,用于处理我的业务.

我使用Identity API对资源所有者(即具有用户+密码凭据的用户)进行身份验证,以使用OAuth2 OWIN中间件获取承载令牌.

我的问题是,一旦我从Identity API获得访问令牌,我想用它来授权对Product API的请求.

这两个API都访问同一个数据库,两者现在都在同一台机器上.

当我尝试对Product API执行请求时,我得到响应消息"Authorization has been denied for this request",而对Identity API执行请求则完美无瑕.

关键是我已经推导OAuthAuthorizationServerProvider出满足一些自定义身份验证/授权要求,但在向Product API发出请求时,它永远不会到达这一点(ValidateClientAuthentication并且GrantResourceOwnerCredentials永远不会调用方法).

我已经放弃了OWIN中间件的顺序可能会影响身份验证流程:两个API都以相同的方式配置.

几天前......

...在尝试以这种方式工作之前,我正在考虑创建自定义OAuthAuthorizationServerProvider和ASP.NET Identity用户存储以在内部实际查询Identity API,因此,将在发出访问权限的OWIN应用程序中验证身份验证和授权.令牌.

我已经为ASP.NET Identity(GitHub存储库)实现了一个自定义用户存储,我还没有实现一个OAuthAuthorizationServerProvider来发出HTTP请求而不是直接使用底层数据库.

Anwyay,我想知道我是否可以避免这样做一段时间,如果我可以从OWIN应用程序发出访问令牌并使用不同的OWIN应用程序以及不同的主机和端口来访问令牌.

更新:调试System.Web.Http

System.Web.HttpASP.NET Web Stack GitHub存储库下载源代码,我也编译了它,并且已经将编译的程序集链接到我的Product API WebAPI项目进行调试AuthorizeAttribute …

asp.net oauth asp.net-web-api owin asp.net-identity

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