私は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();
}
私はこの質問は非常に具体的ではないですけど、誰もがこれで正しい方向に私を指すことができますか?私は少し困惑しています。
Ah!私はリリース前のパッケージを探していたはずです。私はこのようなものを試してみたが、それは.NETスタンダードを対象としていなかった。ありがとう、私は今試してみるよ!私はちょっと馬鹿だと感じる。 –
ありがとう、プロバイダは完全に動作します:) –
@RenéSackersnice!あなたのために働いてうれしい;) – Pinpoint