asp.net – Web API将OAuth令牌作为XML返回
发布时间:2020-05-24 10:30:44 所属栏目:asp.Net 来源:互联网
导读:使用具有单个用户帐户的默认Visual Studio 2013 Web API项目模板,并使用application / xml的Accept标头发布到/ token端点,服务器仍然以 JSON方式返回响应: {access_token:...,token_type:bearer,expires_in:1209599} 有没有办法将令牌恢复为XML? 根据 RFC67
|
使用具有单个用户帐户的默认Visual Studio 2013 Web API项目模板,并使用application / xml的Accept标头发布到/ token端点,服务器仍然以 JSON方式返回响应: {"access_token":"...","token_type":"bearer","expires_in":1209599}
有没有办法将令牌恢复为XML? 解决方法根据 RFC6749,响应格式应该是JSON,Microsoft会相应地实现它.我发现JSON格式是在Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler内部类中实现的,没有任何扩展方式.我还遇到了在XML中进行令牌响应的需要. public class OAuthTokenXmlResponseHttpModule : IHttpModule
{
private static readonly string FilterKey = typeof(OAuthTokenXmlResponseHttpModule).Name + typeof(MemoryStreamFilter).Name;
public void Init(HttpApplication application)
{
application.BeginRequest += ApplicationOnBeginRequest;
application.EndRequest += ApplicationOnEndRequest;
}
private static void ApplicationOnBeginRequest(object sender,EventArgs eventArgs)
{
var application = (HttpApplication)sender;
if (ShouldConvertToXml(application.Context.Request) == false) return;
var filter = new MemoryStreamFilter(application.Response.Filter);
application.Response.Filter = filter;
application.Context.Items[FilterKey] = filter;
}
private static bool ShouldConvertToXml(HttpRequest request)
{
var isTokenPath = string.Equals("/token",request.Path,StringComparison.InvariantCultureIgnoreCase);
var header = request.Headers["Accept"];
return isTokenPath && (header == "text/xml" || header == "application/xml");
}
private static void ApplicationOnEndRequest(object sender,EventArgs eventArgs)
{
var context = ((HttpApplication) sender).Context;
var filter = context.Items[FilterKey] as MemoryStreamFilter;
if (filter == null) return;
var jsonResponse = filter.ToString();
var xDocument = JsonConvert.DeserializeXNode(jsonResponse,"oauth");
var xmlResponse = xDocument.ToString(SaveOptions.DisableFormatting);
WriteResponse(context.Response,xmlResponse);
}
private static void WriteResponse(HttpResponse response,string xmlResponse)
{
response.Clear();
response.ContentType = "application/xml;charset=UTF-8";
response.Write(xmlResponse);
}
public void Dispose()
{
}
}
public class MemoryStreamFilter : Stream
{
private readonly Stream _stream;
private readonly MemoryStream _memoryStream = new MemoryStream();
public MemoryStreamFilter(Stream stream)
{
_stream = stream;
}
public override void Flush()
{
_stream.Flush();
}
public override int Read(byte[] buffer,int offset,int count)
{
return _stream.Read(buffer,offset,count);
}
public override void Write(byte[] buffer,int count)
{
_memoryStream.Write(buffer,count);
_stream.Write(buffer,count);
}
public override string ToString()
{
return Encoding.UTF8.GetString(_memoryStream.ToArray());
}
#region Rest of the overrides
public override bool CanRead
{
get { throw new NotImplementedException(); }
}
public override bool CanSeek
{
get { throw new NotImplementedException(); }
}
public override bool CanWrite
{
get { throw new NotImplementedException(); }
}
public override long Seek(long offset,SeekOrigin origin)
{
throw new NotImplementedException();
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
public override long Length
{
get { throw new NotImplementedException(); }
}
public override long Position
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
#endregion
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在asp.net中使用cookie mvc c#
- 如何将ASP.NET MVC5身份认证添加到现有数据库
- asp.net – 为不同项目中的所有Web应用程序网页添加命名空间
- asp.net-mvc-3 – 如何根据当前页面和/或主页在Orchard CMS
- asp.net-mvc – 以Razor语法为Telerik MVC Grid定义一个Tem
- ASP.NET Ajax库死了吗?
- asp.net-mvc – Ninject和连接字符串
- asp.net – 如何使用Excel服务器端?
- 如何在Asp.Net Web API 2中使用Owin OAuth2修改令牌端点响应
- asp.net – ASP:NET确认密码字段
推荐文章
站长推荐
- asp.net – StyleBundle索引超出了数组的边界
- asp.net-mvc – 在控制器外部生成路由,类似于Url
- asp.net-mvc – 在Azure中启用自定义错误
- asp.net-mvc – ViewModel中的MVC3 RouteUrl
- 为什么我要在公共站点上使用ASP.NET MVC,在Intra
- asp.net-mvc – ASP.NET MVC RenderAction重新呈
- asp.net – 使用表单验证模拟
- asp.net-mvc – ASP.Net MVC中的多项目领域3
- asp.net – Microsoft重写模块 – 强制www url或
- asp.net-mvc – 嵌套对象的远程ViewModel验证无效
热点阅读
