小编Ale*_*lex的帖子

SslStream.ReadAsync从不调用InnerStream.ReadAsync

我不确定我是否遗漏了某些东西,或者SslStream中确实存在设计缺陷(可能还有其他可以包装内部流的流类).

考虑这个伪代码:

MyStream
{
  Task<int> ReadAsync()
  { ... }
}

...

{
  MyStream my = new MyStream();
  SslStream ssl = new SslStream(my);
  ssl.ReadAsync(...);
}
Run Code Online (Sandbox Code Playgroud)

虽然可以预期SslStream.ReadAsync最终将调用MyStream.ReadAsync,但它不会.相反,它会调用MyStream.BeginRead(如果已定义).如果未定义MyStream.BeginRead,则行为将难以预测(它将取决于从哪个类派生MyStream等等).

简而言之,为了使SslStream的async/await方法按预期工作,需要实现内部流类的BeginXXX/EndXXX(非异步/等待方法).

BeginXXX/EndXXX模式比async/await模式更复杂(对我来说,这就是引入async/await的原因 - 使异步编程更容易).但是仍然需要开发BeginXXX/EndXXX方法会失去async/await的目的.

而且,需要知道SslStream类的内部实现(因为如果实现不同,它可以直接调用InnerStream.ReadAsync).我的意思是SslStream的公共签名并没有清楚地向我提供关于我是否应该在我的内部流类中实现ReadAsync或BeginRead的足够信息.

为此,我需要使用试错法或检查SslStream的源代码(及其Stream父作为SslStream从基本Stream类继承ReadAsync).这似乎不是一种可靠而直接的编写代码的方法.

当前实现ass/await方法如SslStream/Stream类中的ReadAsync是有原因的吗?

.net c# async-await

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

如何在浏览器中使用Javascript加密/解密任意二进制文件?

我需要让用户从他们的系统中加载文件,即时对其进行加密,然后上传到服务器,然后做相反的事情(从服务器中下载文件,进行即时解密,然后让用户将其保存在本地)。尽管首选AES,但是确切的加密方法不是很重要。

浏览器中的二进制数据加密/解密之类的链接仅告诉您“使用CryptoJS”,但我找不到任何实际有效的示例。我发现的所有样本都专注于处理字符串,而在二进制数据中,您可以轻松地找到无效的Unicode序列。

我可以测试任何可以处理任何类型文件的示例吗?

javascript encryption cryptojs

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

如何在ASP.NET Core MVC OAuth 2.0中获取访问令牌的价值

在Visual Studio 2017RC中,我创建了具有单个用户帐户的ASP.NET Core MVC应用程序并成功完成了https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins教程以附加Google认证.我现在通过我的Google帐户登录了.

我所做的就是在自动生成的代码中添加几行(在Startup.cs的Configure方法中):

app.UseGoogleAuthentication(new GoogleOptions
{
    ClientId = "xxxx.apps.googleusercontent.com",
    ClientSecret = "xxxx",
    Scope = { "email", "openid" }
});
Run Code Online (Sandbox Code Playgroud)

我现在需要获取由Google发布的访问令牌的价值(并由应用程序存储在cookie中).然后,我将使用它来生成XOAuth2密钥以访问Google服务.例如,在HomeController的About方法(由标准向导自动生成)中,我想显示收件箱中未读电子邮件的数量.使用XOAuth2密钥,我可以登录我的Gmail并从此处继续操作.

我怎样才能得到这个令牌? - 在通过Google初始登录时,是否需要在数据库中存储访问令牌?如果是这样,任何线索如何在标准向导生成的ASP.NET Core MVC应用程序中完成此操作? - 或者,也许我总是可以从cookie中读取访问令牌?如果是这样,怎么样?

最好是,我从cookie中读取它(无论如何),避免在数据库中复制这些信息,但不确定这种方法是否可行(即是否可以解密).

我曾经为ASP.NET MVC做过一次,但是在ASP.NET Core MVC中,事情发生了很大变化,遗留代码已经没用了.

oauth-2.0 asp.net-core-mvc google-oauth2

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

为 C# 中的 Func&lt;Type1, Type2&gt; 序列取短名称

我有这样的代码:

private Func<Request, Response, byte[], string, string, Task> _started;
private Func<Request, Response, byte[], string, string, Task> _progress;
private Func<Request, Response, byte[], string, string, Task> _completed;
private Func<Request, Response, byte[], string, string, Task> _errorOccurred;
private Func<Request, Response, byte[], string, string, Task> _cancelled;
Run Code Online (Sandbox Code Playgroud)

我最好有类似的东西:

typedef Func<Request, Response, byte[], string, string, Task> StatusUpdateAsyncCallback; // in C++ way.
private StatusUpdateAsyncCallback _started;
// and so on.
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何用 Func 做到这一点。我习惯于委托(我没有这个问题,因为我可以为任何委托指定一个唯一的名称)但现在无法弄清楚如何为 Func 声明重复相同的内容。

我正在从委托类型的简单声明中迁移,delegate Task StatusUpdateAsyncCallback(Request req, Response resp, byte[] data, string account, string alias)因为我现在将依赖于一些特定于 …

c# func

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

如何为 UWP 应用程序的 Google 提供商创建自定义 OAuth 2.0 redirect_uri?

我想在 Google 开发者控制台中为本机应用程序注册自定义的 redirect_uri (如 pw.oauth2:/oauth2redirect)(这是 UWP 应用程序的推荐方法)。根据https://developers.google.com/identity/protocols/OAuth2InstalledApp#request-parameter-redirect_uri,必须有一个选项可以选择“自定义 URI 方案(Android、iOS、UWP)”,但我只看到这些选项:

  • Web应用程序
  • 安卓
  • 铬合金
  • iOS系统
  • 其他

选择“其他”不允许我指定redirect_uri。

我应该如何为 UWP 应用注册自定义 redirect_uri?

如果我不注册redirect_uri,我会在OAuth 授权过程中收到redirect_uri_mismatch 错误。

此 github 示例https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp中的 ClientID有效。看起来这个 ClientID 已注册 required_uri。但如何为我自己的 ClientID 实现同样的效果呢?

这个老问题讨论了类似的问题,但也从未得到答复: Google APIs for UWP not Play much with custom redirect schema

编辑:澄清一下。我正在使用上面提到的 Google 示例(https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp)。它与 Google 提供的硬编码 ClientID 配合使用。我只是无法让它与我自己的 ClientID 一起工作,因为我看不到如何在他们的开发者控制台中注册我自己的redirect_uri。

oauth-2.0 google-oauth uwp

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