我的 OWIN Startup 类中有以下代码:
myiapbuilder.Map("/something/something", doit =>
{
doit.Use<pipepart1>();
doit.Use<pipepart2>();
doit.Use<piprpart3>();
});
Run Code Online (Sandbox Code Playgroud)
如果在 Pipepart1 中出现我不喜欢的情况,我想在该中间件中向调用者编写自定义文本/纯文本响应,并且不触发 Pipepart2 或 Pipepart3。CodePlex 上的 BranchingPipelines 示例显示了很多内容,但并非如此。
是否可以根据早期的中间件评估来短路流程或以其他方式停止中间件的 OWIN 处理?
任何人都可以告诉我,在哪里可以找到Microsoft.AspNet.Identity.Core和Microsoft.AspNet.Identity.EntityFramework包的源代码?
这可能是一个愚蠢的问题,但我在互联网上没有找到答案。我看到以下 MVC5 和 oAuth 代码
\n\napp.UseFacebookAuthentication\napp.UseGoogleAuthentication();
\n\n但是,我在调试器中的应用程序对象上没有看到任何名为 UseGoogleAuthentication 的方法。我确实在 Katana 代码中的 AppBuilder 上看到了 \xe2\x80\x9cUse\xe2\x80\x9d 方法。那么发生了什么?这个 \xe2\x80\x9capp.UseGoogleAuthentication();\xe2\x80\x9d 神秘方法是从哪里来的?我确信我错过了一些约定,但它是什么?
\n\n提前致谢
\n与Katana项目合作时,我们经常处理中间件.在ASP.NET网站上他们说
如前所述,当服务器接受来自客户端的请求时,它负责将其传递给OWIN组件管道,这些组件由开发人员的启动代码指定.这些管道组件称为中间件.
那没关系,但我完全不明白.起初我认为中间件是ASP.NET组件,如WebAPI,SignalR和所有这些.但是,在学习身份验证时,我看到了Cookie身份验证中间件.这个不是像WebAPI这样的整个框架,因此它不适合我最初的中间件概念.
那么Katana中间件到底是什么?它们只是可以集成在执行管道上并在环境字典上工作的代码片段?因此,它们可以是简单的组件,如身份验证中间件或与WebAPI等整个框架进行通信的接口?
我怎样才能注册OAuthAuthorizationServerMiddleware,并OAuthBearerAuthenticationMiddleware在ASP.NET 5?
我尝试了以下方法:
app.UseMiddleware(typeof(OAuthAuthorizationServerMiddleware), OAuthServerOptions);
app.UseMiddleware(typeof(OAuthBearerAuthenticationMiddleware), new OAuthBearerAuthenticationOptions());
Run Code Online (Sandbox Code Playgroud)
但是这会引发以下错误:
System.Exception: TODO: unable to locate suitable constructor for Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware. Ensure 'instanceType' is concrete and all parameters are accepted by a constructor.
Run Code Online (Sandbox Code Playgroud)
我正在尝试将在此(单击此处)应用程序中实现的基于令牌的身份验证移植到ASP.NET 5中.
我在这里遇到了障碍,无法注册OAuth服务器中间件和OAuth承载身份验证.
我试图找出如何将clientID(或我可能需要的任何其他数据)放在承载/访问令牌中.
我正在使用OWIN OAuth来创建令牌.我可以向身份凭证添加声明,然后将其标记/序列化到令牌中并传递回客户端.
然后,客户端调用受保护的API,并且API对令牌进行反序列化,并为用户设置IPrinciple.此标识对象包含用户名和ClaimsIdentity中的范围.
我想获得其他信息,例如首先发出获取令牌请求的clientID.
我可以把这些数据放在索赔中; 这显然有效,但它是一个黑客.
我已经做了很多搜索,我不确定如果可能的话,如何在承载/访问令牌中存储额外的数据.
提前致谢!
我今天注意到在尝试将内联lambda函数转换为闭包时,所以我可以在多个位置使用相同的lambda.这将编译为正确的扩展方法:
appBuilder.Use((ctx, next) => {
Console.WriteLine("Test");
return next();
});
Run Code Online (Sandbox Code Playgroud)
这Use是一个由以下定义的扩展:
public static IAppBuilder Use(this IAppBuilder app, Func<IOwinContext, Func<Task>, Task> handler);
Run Code Online (Sandbox Code Playgroud)
现在,如果我做同样的事情,但将内联移动到变量:
Func<IOwinContext, Func<Task>, Task> handler = (ctx, next) => {
Console.WriteLine("Test");
return next();
};
appBuilder.Use(handler);
Run Code Online (Sandbox Code Playgroud)
编译器解析为此方法(不是扩展名):
IAppBuilder Use(object middleware, params object[] args);
Run Code Online (Sandbox Code Playgroud)
我在这做什么导致该方法更改签名?
提前致谢.
您好我已阅读并实施了这些Vittorio Bertocci教程:
"使用Windows Azure AD和Microsoft OWIN组件保护ASP.NET Web API"
"使用Microsoft.Owin.Security.ActiveDirectory保护自托管API"
然而,与教程不同,我的Web应用程序由以下OWIN组件组成:NancyFx和ASP.NET Web API(遵循此处所述的体系结构模式)当我尝试将AAD身份验证(如Bertocci先生在其教程中所做的)实现到我的身份时NancyFx模块(用于验证访问需要身份验证的路由的用户):
我收到以下错误
附加信息:加载交互式用户身份验证所需的程序集失败.确保程序集"Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"存在.
显然,弹出的要求用户登录的AAD对话框依赖于WindowsForms,不应该从Web应用程序调用.
我应该使用什么AAD凭证提示?如何在Web应用程序客户端中实现AAD身份验证?
IOwinContext似乎没有HTTP Referrer,我需要抓住它.获取特定变量的正确方法是什么?IOwinContext有几个Typed PEM,但我没有特别看到referer.
我正在使用的系统是自托管的.
谢谢.
在我的网络应用程序中,我已将Google注册为单点登录提供商:
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions {
ClientId = "8765.......apps.googleusercontent.com",
ClientSecret = "Secret"
})
Run Code Online (Sandbox Code Playgroud)
我的应用不允许用户注册/注册(而是他们的帐户由管理员创建,但他们稍后可以将他们的帐户与Google关联).
在我的"使用Google登录"控制器中,我正在尝试发布一个Challenge()重定向到Google.这可能不是正确的方法:
string redirectUri = "http://localhost:55262/SSO/Google/ProcessToken"; // actually created in code, but shown as string for clarity
AuthenticationProperties properties = new AuthenticationProperties();
properties.RedirectUri = Server.UrlEncode(redirectUri);
Context.GetOwinContext().Authentication.Challenge(properties, "Google");
Run Code Online (Sandbox Code Playgroud)
这正确地将用户发送给Google,但Google会出现错误:redirect_uri_mismatch,说:
请求中的重定向URI:http:// localhost:55262/signin-google 与注册的重定向URI不匹配.
我在Google控制面板中的返回URI集合不包含redirect_uri指定之前看到过此错误.
如果我在VS2015中调试,我可以看到redirect_uri属性设置正确AuthenticationProperties,但似乎OWIN/Katana没有将它传递给Google.相反,当我点击Google时,return_uri是OWIN/Katana使用的默认值.我设置的那个被忽略了.
Google请求详细信息似乎证实了这一点:
scope=openid profile email
response_type=code
redirect_uri=http://localhost:55262/signin-google
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我是否应该Challenge()不允许用户将其本地应用程序帐户与Google相关联?