Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Azure函数中使用OWIN?_Azure_Owin_Azure Functions - Fatal编程技术网

如何在Azure函数中使用OWIN?

如何在Azure函数中使用OWIN?,azure,owin,azure-functions,Azure,Owin,Azure Functions,我们有一个使用WebAPI和OWIN构建的API。现在这意味着很多身份验证代码都使用OWIN类,大部分是OwinContext,但当转换为在Azure函数中运行时,您基本上被简化为一个接收HttpRequestMessage的控制台应用程序 为了不必重新实现我们的整个授权/身份验证方案,有没有办法在Azure函数中使用OWIN?可能通过手动创建文本或其他方式 如果这个问题太宽泛,我很抱歉,但我似乎无法理解这个问题 可能通过手动创建文本或其他方式 是的,我们可以根据请求消息手动创建它。基于,我们需

我们有一个使用WebAPI和OWIN构建的API。现在这意味着很多身份验证代码都使用OWIN类,大部分是OwinContext,但当转换为在Azure函数中运行时,您基本上被简化为一个接收HttpRequestMessage的控制台应用程序

为了不必重新实现我们的整个授权/身份验证方案,有没有办法在Azure函数中使用OWIN?可能通过手动创建文本或其他方式

如果这个问题太宽泛,我很抱歉,但我似乎无法理解这个问题

可能通过手动创建文本或其他方式

是的,我们可以根据请求消息手动创建它。基于,我们需要向环境字典添加所需的键。下面的示例代码供您参考

Dictionary<string, object> environment = new Dictionary<string, object>();

MemoryStream requestBody = new MemoryStream();
byte[] json = Encoding.UTF8.GetBytes("{ 'a' : 'value1' }");
requestBody.Write(json, 0, json.Length);
environment.Add("owin.RequestBody", requestBody);
var headers = new Dictionary<string, string[]>();
headers.Add("host",new string[] { "myhost.com" });
headers.Add("Content-Type", new string[] { "application/json" });
environment.Add("owin.RequestHeaders", headers);
environment.Add("owin.RequestMethod", "POST");
environment.Add("owin.RequestPath", "a.html");
environment.Add("owin.RequestPathBase", "/");
environment.Add("owin.RequestProtocol", "HTTP/1.1");
environment.Add("owin.RequestQueryString", "myhost.com");
environment.Add("owin.RequestScheme", "http");

OwinContext context = new OwinContext(environment);

context.Environment.Add("owin.ResponseHeaders", new Dictionary<string, string[]>());
context.Environment.Add("owin.ResponseBody", new MemoryStream());
Dictionary环境=新建Dictionary();
MemoryStream requestBody=新的MemoryStream();
byte[]json=Encoding.UTF8.GetBytes(“{a':'value1'}”);
Write(json,0,json.Length);
Add(“owin.RequestBody”,RequestBody);
var headers=newdictionary();
Add(“host”,新字符串[]{“myhost.com”});
Add(“内容类型”,新字符串[]{“application/json”});
Add(“owin.RequestHeaders”,headers);
Add(“owin.RequestMethod”、“POST”);
Add(“owin.RequestPath”、“a.html”);
Add(“owin.RequestPathBase”,“/”;
Add(“owin.RequestProtocol”、“HTTP/1.1”);
Add(“owin.RequestQueryString”、“myhost.com”);
Add(“owin.RequestScheme”、“http”);
OwinContext context=新的OwinContext(环境);
context.Environment.Add(“owin.ResponseHeaders”,newdictionary());
context.Environment.Add(“owin.ResponseBody”,newmemoryStream());
可能通过手动创建文本或其他方式

是的,我们可以根据请求消息手动创建它。基于,我们需要向环境字典添加所需的键。下面的示例代码供您参考

Dictionary<string, object> environment = new Dictionary<string, object>();

MemoryStream requestBody = new MemoryStream();
byte[] json = Encoding.UTF8.GetBytes("{ 'a' : 'value1' }");
requestBody.Write(json, 0, json.Length);
environment.Add("owin.RequestBody", requestBody);
var headers = new Dictionary<string, string[]>();
headers.Add("host",new string[] { "myhost.com" });
headers.Add("Content-Type", new string[] { "application/json" });
environment.Add("owin.RequestHeaders", headers);
environment.Add("owin.RequestMethod", "POST");
environment.Add("owin.RequestPath", "a.html");
environment.Add("owin.RequestPathBase", "/");
environment.Add("owin.RequestProtocol", "HTTP/1.1");
environment.Add("owin.RequestQueryString", "myhost.com");
environment.Add("owin.RequestScheme", "http");

OwinContext context = new OwinContext(environment);

context.Environment.Add("owin.ResponseHeaders", new Dictionary<string, string[]>());
context.Environment.Add("owin.ResponseBody", new MemoryStream());
Dictionary环境=新建Dictionary();
MemoryStream requestBody=新的MemoryStream();
byte[]json=Encoding.UTF8.GetBytes(“{a':'value1'}”);
Write(json,0,json.Length);
Add(“owin.RequestBody”,RequestBody);
var headers=newdictionary();
Add(“host”,新字符串[]{“myhost.com”});
Add(“内容类型”,新字符串[]{“application/json”});
Add(“owin.RequestHeaders”,headers);
Add(“owin.RequestMethod”、“POST”);
Add(“owin.RequestPath”、“a.html”);
Add(“owin.RequestPathBase”,“/”;
Add(“owin.RequestProtocol”、“HTTP/1.1”);
Add(“owin.RequestQueryString”、“myhost.com”);
Add(“owin.RequestScheme”、“http”);
OwinContext context=新的OwinContext(环境);
context.Environment.Add(“owin.ResponseHeaders”,newdictionary());
context.Environment.Add(“owin.ResponseBody”,newmemoryStream());

您是否碰巧使用JWT进行身份验证?我们对我们的承载令牌进行身份验证,是的。有什么见解吗?我个人没有在Azure函数中设置OWIN管道的经验。Amor发布的代码片段看起来很有趣。但是,验证JWTs是一项相对简单的任务,因此,如果主要考虑的是移植身份验证层,您可以轻松地将其从OWIN转移到在函数中调用的实用程序库中。您是否碰巧使用JWT进行身份验证?是的,我们使用承载令牌。有什么见解吗?我个人没有在Azure函数中设置OWIN管道的经验。Amor发布的代码片段看起来很有趣。但是,验证JWTs是一项相对简单的任务,因此如果主要关注的是移植Auth层,您可以轻松地将其从OWIN转移到在函数中调用的实用程序库中。是否有更新?如果您有与此主题相关的更多问题,请随时告诉我。有任何更新吗?如果您有关于这个主题的更多问题,请随时告诉我。