ServiceStack:如何使用自定义OAuthProvider来访问Azure资源

时间:2016-06-06 18:23:32

标签: azure cors servicestack

  1. 创建实现的自定义提供程序:OAuthProvider,IAuthWithRequest。

  2. 创建了调用提供程序的PreAuthenticate()方法的AuthenticateAttribute。

  3. 已配置的CorsFeature:

    Plugins.Add(new CorsFeature(new[] {  "http://localhost:23589",  "*" },
            allowCredentials: true,
            allowedHeaders: "Content-Type, Allow, Authorization"));
    
  4. 问题:当调用提供者的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”访问。

    正确的方法是什么:

    1. 从Microsoft
    2. 申请验证码
    3. 将代码放回查询字符串
    4. 使用代码
    5. 请求身份验证令牌

      授权代码授予流程图

1 个答案:

答案 0 :(得分:1)

看看ServiceStack.Authentication.Aad。至少应该提供经过单元测试的参考实现。或者您可以直接使用NuGet包。

我鼓励您克隆存储库,您可以在其中单步执行独立的SelfHostTest以及单元测试。

据我所知,CORS不应该是必要的。我可能错了。但在我的实现中,来自Microsoft的JSON响应由服务器处理,而不是Web浏览器。

我很抱歉没有在此回复中包含代码示例;从该存储库中获取一段代码是很困难的。整个存储库是您基本问题的答案。

完全披露:我是该插件的作者并获得虚构互联网积分供其使用。