如何在Azure函数中使用OWIN?
我们有一个使用WebAPI和OWIN构建的API。现在这意味着很多身份验证代码都使用OWIN类,大部分是OwinContext,但当转换为在Azure函数中运行时,您基本上被简化为一个接收HttpRequestMessage的控制台应用程序 为了不必重新实现我们的整个授权/身份验证方案,有没有办法在Azure函数中使用OWIN?可能通过手动创建文本或其他方式 如果这个问题太宽泛,我很抱歉,但我似乎无法理解这个问题 可能通过手动创建文本或其他方式 是的,我们可以根据请求消息手动创建它。基于,我们需要向环境字典添加所需的键。下面的示例代码供您参考如何在Azure函数中使用OWIN?,azure,owin,azure-functions,Azure,Owin,Azure Functions,我们有一个使用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转移到在函数中调用的实用程序库中。是否有更新?如果您有与此主题相关的更多问题,请随时告诉我。有任何更新吗?如果您有关于这个主题的更多问题,请随时告诉我。