创建实现的自定义提供程序:OAuthProvider,IAuthWithRequest。
创建了调用提供程序的PreAuthenticate()方法的AuthenticateAttribute。
已配置的CorsFeature:
Plugins.Add(new CorsFeature(new[] { "http://localhost:23589", "*" },
allowCredentials: true,
allowedHeaders: "Content-Type, Allow, Authorization"));
问题:当调用提供者的Authenticate方法来请求代码时
“login.microsoftonline.com”(authService.Redirect(PreAuthUrlFilter(this, codeRequest));
)抛出以下错误:
XMLHttpRequest无法加载https://login.microsoftonline.com/d331431b-899c-4666-8094-e82e6bfc3964/oaut ... ort%2fpbi& scope = user_impersonation& state = f8e986304a47427d8c6a76767f2ef573。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:23589”访问。
正确的方法是什么:
授权代码授予流程图
答案 0 :(得分:1)
看看ServiceStack.Authentication.Aad。至少应该提供经过单元测试的参考实现。或者您可以直接使用NuGet包。
我鼓励您克隆存储库,您可以在其中单步执行独立的SelfHostTest以及单元测试。
据我所知,CORS不应该是必要的。我可能错了。但在我的实现中,来自Microsoft的JSON响应由服务器处理,而不是Web浏览器。
我很抱歉没有在此回复中包含代码示例;从该存储库中获取一段代码是很困难的。整个存储库是您基本问题的答案。
完全披露:我是该插件的作者并获得虚构互联网积分供其使用。