IdentityServer3をスピンアップし、AspNetIdentityおよびIdentityManagerを使用して作業しています。リソース所有者のフローのサンプルに基づいてJSクライアントを作成しました。私のAspNetIdentity実装は、そのようなuserstoreが組織テーブルへの外部キーを持つようにカスタマイズされています。 IdentityServerとWebApiはマルチテナントになるため、組織テーブルはテナントテーブルとして機能します。ユーザーがログインすると、ユーザーのテナントIDを指定する追加のパラメーターを要求に渡す必要があります。テナントIDを取得すると、AuthenticateLocalAsyncをオーバーライドして、ユーザーのテナント情報を検索します。IdentityServer3の追加パラメータを作成する方法grant_type:password
grant_type:passwordに追加のテナントIDやその他のパラメータを渡すことができません。私はact_values配列を渡そうとしましたが、私はこれをすべて正しい方法で行っているのかどうかはわかりません。
スコープ、クレーム、役割などについての詳しい説明についての追加情報は、すべてがまだあふれているため大きな助けになります。ここで
はここidsvr
new Client
{
ClientId = "tleweb",
ClientName = "TLE Web Client",
ClientSecrets = new List<Secret>
{
new Secret("secret".Sha256())
},
Enabled = true,
Flow = Flows.ResourceOwner,
RequireConsent = false,
AllowRememberConsent = true,
RedirectUris = new List<string>(){ "https://localhost:13048/account/signInCallback"},
PostLogoutRedirectUris = new List<string>(){ "https://localhost:13048/"},
AllowedScopes = new List<string>()
{
Constants.StandardScopes.OpenId,
Constants.StandardScopes.Profile,
Constants.StandardScopes.Email,
"read",
"write",
"tenant_id"
},
AllowedCorsOrigins = new List<string>
{
"http://localhost:13048"
},
AccessTokenType=AccessTokenType.Jwt,
AccessTokenLifetime = 3600,
AbsoluteRefreshTokenLifetime = 86400,
SlidingRefreshTokenLifetime = 43200,
RefreshTokenUsage = TokenUsage.OneTimeOnly,
RefreshTokenExpiration = TokenExpiration.Sliding
}
上のクライアントであるJSクライアントコードにそれを発見
function getToken() {
var uid = document.getElementById("username").value;
var pwd = document.getElementById("password").value;
var xhr = new XMLHttpRequest();
xhr.onload = function (e) {
console.log(xhr.status);
console.log(xhr.response);
var response_data = JSON.parse(xhr.response);
if (xhr.status === 200 && response_data.access_token) {
token = response_data.access_token;
}
showToken(response_data);
}
xhr.open("POST", tokenUrl);
var data = {
username: uid,
password: pwd,
acr_values: ["1"],
grant_type: "password",
scope: "openid profile read write tenant_id"
};
var body = "";
for (var key in data) {
if (body.length) {
body += "&";
}
body += key + "=";
body += encodeURIComponent(data[key]);
}
xhr.setRequestHeader("Authorization", "Basic " + btoa(client_id + ":" + client_secret));
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(body);
}