2017-06-11 26 views
2

私はASP.NetコアアプリケーションにSteam OpenIdを実装しようとしています。以前のOpenID実装経験はありません。
残念なことに、Steamはドキュメントを大量に用意しておらず、単に「OpenIDライブラリをダウンロードする」と述べており、ドメイン名にAPIキーを登録するページを提供しています。ASP.Net Core OpenIdConnect Steam

完全なASP.Netでは使用可能な実装がいくつかありますが、コアではありませんが、いくつかの違いがあるようです。

Microsoft.AspNetCore.Authentication.OpenIdConnectを使用しようとしていますが、これが適切なライブラリであるかどうかは完全にはわかりません。 "OpenID"と "OpenID Connect"に違いがあるようです。

:私は、サインインページ、挑戦を返すアクションで構成されてヒットするとすぐに

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    DisplayName = "Steam", 
    Authority = "http://steamcommunity.com/openid", 
    ClientId = "MyClientId", 
    ClientSecret = "ApiKeyHere", 
    SignInScheme = "SignInCookie", 
    CallbackPath = new PathString("/Account/SteamCallback"), 
    RequireHttpsMetadata = false 
}); 

しかし:

私はそうのように私のStartup.csに認証を設定しました

public IActionResult SignIn() 
{ 
    return Challenge(); 
} 

私はエラーに

JsonReaderExceptionを得る:<:値を解析中に予期しない文字が発生しました。パス0、行0、位置0。
Newtonsoft.Json.JsonTextReader.ParseValue()InvalidOperationException:
IDX10803: 'http://steamcommunity.com/openid/.well-known/openid-configuration'から構成を取得できません。

私はこのURLを見てみると、OpenIDのを設定するためのXMLデータを返すようだ:この情報should be in JSONこと

<?xml version="1.0" encoding="UTF-8"?> 
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)"> 
    <XRD> 
     <Service priority="0"> 
      <Type>http://specs.openid.net/auth/2.0/server</Type>   
      <URI>https://steamcommunity.com/openid/login</URI> 
     </Service> 
    </XRD> 
</xrds:XRDS> 

しかし、OpenIDの仕様状態。

次の私はずっとthisのASP.Net implemtationが、それは、しかし、これが原因OpenIdConnectMiddlewareクラスが必要で不足しているサービスに構築することができないことが生じないかのように、OpenIdConnectMiddleware自分自身を登録してみました:

をSystem.InvalidOperationException: 'タイプ の適切なコンストラクタ' TestApplication.SteamOpenId.SteamAuthenticationMiddleware 'を に配置できませんでした。型が具体的であり、サービスが 公共のコンストラクタのすべてのパラメータに登録されていることを確認してください。

私の実装:

public class SteamAuthenticationMiddleware : OpenIdConnectMiddleware 
{ 
    public SteamAuthenticationMiddleware(
     RequestDelegate next, 
     IDataProtectionProvider dataProtectionProvider, 
     ILoggerFactory loggerFactory, 
     UrlEncoder encoder, 
     IServiceProvider services, 
     IOptions<SharedAuthenticationOptions> sharedOptions, 
     IOptions<OpenIdConnectOptions> options, 
     HtmlEncoder htmlEncoder) : 
     base(
      next, 
      dataProtectionProvider, 
      loggerFactory, 
      encoder, 
      services, 
      sharedOptions, 
      options, 
      htmlEncoder) 
    { 
    } 

    protected override AuthenticationHandler<OpenIdConnectOptions> CreateHandler() => new SteamAuthenticationHandler(); 
} 

私はこの質問は非常に具体的ではないですけど、誰もがこれで正しい方向に私を指すことができますか?私は少し困惑しています。

答えて

2

「OpenID」と「OpenID Connect」には違いがあるようです。

存在する:OpenID 1/2とOpenID Connectはまったく異なるプロトコルです。

SteamはまだOpenID 2.0を使用しているため、Steamアカウントを使用してASP.NET CoreのOpenID Connectミドルウェアを使用してユーザーを認証することはできません。これは2つのプロトコルが互換性がないためです。

私はこの質問が非常に具体的ではないことを知っていますが、誰もこれで正しい方向に私を指摘することができますか?私は少し困惑しています。これ

あなたは特別ASP.NETコア用に開発された汎用的なのOpenID 2.0のプロバイダから派生を言及したASPNET-contribのスチームミドルウェアとは、おそらくあなたの最良の選択肢である(言った、私は、それを書かれている男です私はおそらく客観的ではないでしょう)。

パッケージはNuGet.org:https://www.nuget.org/packages/AspNet.Security.OpenId.Steam/にあります。

+0

Ah!私はリリース前のパッケージを探していたはずです。私はこのようなものを試してみたが、それは.NETスタンダードを対象としていなかった。ありがとう、私は今試してみるよ!私はちょっと馬鹿だと感じる。 –

+0

ありがとう、プロバイダは完全に動作します:) –

+0

@RenéSackersnice!あなたのために働いてうれしい;) – Pinpoint