小编Jef*_*eff的帖子

Web API身份验证和授权(OAuth)

请考虑以下(常见)方案.我将首先尝试使用OAuth指定我对(漂亮的)Web API的理解.如果我有任何错误的流程,请纠正我.

我的API:关注的焦点,所有客户都使用它.

我的Web应用程序:就像任何其他客户端一样使用API​​.

我的移动应用程序:也使用API​​,与Web应用程序完全相同.用户应该能够在不打开浏览器的情况下进行身份验证.

第三方Web App:也使用API​​ - 但是,用户/资源所有者必须授予应用程序执行某些操作的权限.他们通过重定向到我的站点(或打开一个弹出窗口),在必要时记录用户,并提示用户进行访问来完成此操作.

第三方移动应用程序:与第三方Web应用程序相同的要求.


问题

  • API应该处理身份验证和授权吗?
  • API如何知道谁(使用客户端应用程序的资源所有者)正在使用API​​?
  • 当用户使用我的官方客户端时,他们显然不必授予任何权限 - 我的客户应该拥有所有权限.在调用API时,我如何区分我的官方客户和第三方客户?

这是我理解的,并且到目前为止都会这样做.这是我真正需要帮助的地方 - 正确完成这项工作.

官方网络应用

- Client attempts to `GET /api/tasks/".
- API says "who are you? (HTTP 401)
- Official web app redirects to login form.
> Bob enters his credentials.
- .. now what? Get an authentication token? Cookie?
Run Code Online (Sandbox Code Playgroud)
  • 由于Web应用程序只是我的API的使用者,我将如何管理登录状态?网络应用程序应该这样做吗?
  • Web应用程序是否可以直接访问用户数据库,而不是根据API验证凭据?

我主要使用.NET(C#),但我喜欢一种适用于基于Node JS的API的方法.

你会怎么做?特别是客户流程对我来说是一个问题.我问的原因是,我已经知道除非绝对必要,否则你不应该推出自己的安全解决方案,所以如果有任何标准的准则,请告诉我.:)

security authentication rest oauth asp.net-web-api

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

检查MyString [1]是否是字母字符?

我有一个字符串,让我们调用它MyStr.我试图摆脱字符串中的每个非字母字符.就像在IM中像MSN和Skype一样,人们将他们的显示名称设置为[-Bobby-].我想删除该字符串中不是字母字符的所有内容,所以我留下的就是"名称".

我怎么能在Delphi中做到这一点?我正在考虑创建一个TStringlist并在那里存储每个有效字符,然后IndexOf用来检查char是否有效,但我希望有一个更简单的方法.

delphi string character char

7
推荐指数
2
解决办法
7733
查看次数

单独的数据结构与VirtualStringTree的PVirtualNodes存储数据?

所以我一直在搞乱创建自己独立的数据结构.我终于让它工作了,但后来我发现与旧方法相比,内存使用率高得离谱.

为了测试这个,我创建了相同的测试应用程序,但我会将数据存储在我的PVirtualNodes中.

当添加1000个根,每个1000个子节点时,单独的数据结构使用大约208 MB,而PVirtualNode只使用大约160 MB,并且它也快一点.

我认为使用单独的数据结构应该使用更少的内存,并且更快,但我想这是代价?

以下是"在PVirtualNode中存储数据"的来源:http://pastebin.com/j6L2eHJt

以下是"在单独数据结构中存储数据"的来源:http://pastebin.com/iSwR0hW1

delphi memory-management virtualtreeview data-structures

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

从C#调用C代码 - 遇到了几个问题

我有一些C代码,我尝试使用C#.大部分转换都已完成.我有几个问题.

"C"代码的一部分看起来像这样.

typedef struct r_GetCPL {

  UInt8 Storage;
  UInt8 Key[16];             //(1) 

  UInt8 *Buff;               //(2)
  Array16 *CryptoKeyIDs;     //(3)

} REPLY_GETCPL;
Run Code Online (Sandbox Code Playgroud)

在'C'中定义的别名

typedef unsigned char      UInt8;
typedef unsigned short     UInt16;
typedef unsigned long      UInt32;
typedef unsigned long long UInt64;

typedef UInt8   Array8[8];
typedef UInt8   Array16[16];
typedef UInt8   Array32[32];
typedef UInt8   Array64[64];
typedef UInt8   Array128[128];
Run Code Online (Sandbox Code Playgroud)

我假设我可以用直接结构定义替换typedef.这样好吗?我定义的等效C#结构是,

public struct REPLY_GETCPL 
{
  Byte Storage;
  Byte[16] Key;          //(1) Is this right?

  UInt8 *Buff;           //(2)  What is the equivalent?
  Array16 *CryptoKeyIDs; //(3)  What is the equivalent?
} …
Run Code Online (Sandbox Code Playgroud)

c c#

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

堆栈溢出

嘿SO!我在StackOverflow.com上发布了Stack Overflow问题.讽刺最好!

无论如何.我在我的SkypeReply事件处理程序上调用此过程,该事件被解雇了很多:

  Procedure OnCategoryRename;
  Var
    CategoryID : Integer;
    sCtgName : String;
  Begin
    if (AnsiContainsStr(pCommand.Reply,'GROUP')) and (AnsiContainsStr(pCommand.Reply,'DISPLAYNAME')) then
      begin
         sCtgName := pCommand.Reply;
         Delete(sCtgName,1,Pos('GROUP',sCtgName)+5);
         CategoryID := StrToInt(Trim(LeftStr(sCtgName,Pos(' ',sCtgName))));
         sCtgName := GetCategoryByID(CategoryID).DisplayName; // Removing THIS line does not produce a Stack Overflow!
         ShowMessage(sCtgName); 
      end;
Run Code Online (Sandbox Code Playgroud)

这样做的想法是通过我的Skype群组列表循环,以查看已重命名的群组.AFAIK并不重要,因为我的SO已被追溯到此处出现

Function GetCategoryByID(ID : Integer):IGroup;
Var
  I : Integer;
  Category : IGroup;
Begin
  // Make the default result nil
  Result := nil;

  // Loop thru the CUSTOM CATEGORIES of the ONLY SKYPE CONTROL used in this …
Run Code Online (Sandbox Code Playgroud)

stack-overflow delphi skype function

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

Textarea horiz.滚动条不适用

我有一个包含代码的textarea.问题是,为了使它看起来不错,Textarea必须停止包装文本,而是使用水平滚动条.

我试过这个:

textarea
{
    overflow: scroll;
    overflow-y: scroll;
    overflow-x: scroll;
    overflow:-moz-scrollbars-horizontal;

}
Run Code Online (Sandbox Code Playgroud)

还有这个:

textarea
{

    overflow: auto;
    overflow-y: scroll;
    overflow-x: scroll;
    overflow:-moz-scrollbars-horizontal;

}
Run Code Online (Sandbox Code Playgroud)

但是水平滚动条没有应用.

这样做的正确方法是什么?

html css textarea scrollbar

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

JS"窗口"宽度 - 高度与"屏幕"宽度 - 高度?

当我看到这段代码时,我想知道一点:

// Get the screen height and width
var maskHeight = $(document).height();
var maskWidth = $(window).width();

...

// Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
Run Code Online (Sandbox Code Playgroud)

$(document).height();和之间有什么区别$(window).height();

javascript jquery document window screen

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

PHP - 将自己的大小暴露给客户端(因此客户端知道它下载了多少)

我的PHP脚本在从我的Delphi桌面客户端发出POST请求调用之后输出.sql文件的内容.

以下是发生的事情:

  1. 我的桌面客户端向我的PHP脚本发送POST请求.
  2. 然后脚本调用mysqldump并生成一个文件 -xdb_backup.sql
  3. 然后脚本include "xdb_backup.sql";将打印并将其返回到桌面客户端,然后删除SQL文件.

问题是,SQL文件的大小可能会有所不同(为了测试,我生成了一个6 MB的文件).我希望我的桌面客户端能够显示进度,但是PHP脚本没有公开它的大小,所以我没有Progressbar.Max分配值.

如何让我的PHP脚本让客户知道它有多大before the whole thing is over

注意:下载SQL文件不是一个选项,因为脚本必须销毁它.:)

php sql delphi size dynamic

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

重新启动整个应用程序生命周期的Delphi TThread

我创建了一个派生自TThread的类,因为我希望做一些异步的东西,但为了避免创建另一个类,我在该线程类周围构建了整个东西.不确定这是不是很好的做法,如果我不能让它工作,那么我想我别无选择,只能重新编码..

问题:我在FormCreate上创建Thread,分配一些属性,然后在FormDestroy上释放它.在Thread的构造函数中,我设置了FreeOnTerminate = False.当我点击表格上的一个按钮时,我Start();就是线程.好的,所以它按预期运行,发生错误(预期!),它被传递给我的错误处理事件,它似乎终止.然后我再次单击该按钮,我收到Cannot call Start on a running or suspended thread错误.

如何在不释放线程的情况下完成线程,并让我重新启动它?

delphi multithreading

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

序列化为JSON时排除集合中的特定项

我试图"挑选"我要序列化的特定类型的集合中的哪些对象.

示例设置:

public class Person
{
    public string Name { get; set; }

    public List<Course> Courses { get; set; }
}

public class Course
{
    ...

    public bool ShouldSerialize { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要能够排除Person.Courses集合中ShouldSerialize为false的所有课程.这需要在ContractResolver中完成 - ShouldSerialize属性就是一个例子,在我的实际场景中可能还有其他标准.我不想创建一个ShouldSerializeCourse(如这里指定的那样:http://james.newtonking.com/json/help/index.html?topic = html/ConditionsProperties.htm )

我似乎无法找出在ContractResolver中覆盖哪个方法.我该怎么做?

.net c# json json.net

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