Başlıkta ifade doğru mu? Taiseer Joudeh'in (bu konudaki çalışmalarınız için teşekkürler, btw) http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/ numaralı telefondaki çalışmasına dayandığım soru. Ben bir erişim belirteci süresi dolduğunda yenileme davranışı doğru Jetonlar anlıyorsanızOauth2'deki yenileme simgeleri, yeni erişim kodu alınırken değiştirilmemelidir
, biz
'grant_type=refresh_token&refresh_token=' + token
gibi bir şeyle bizim yetkilendirme sunucusunun belirteç uç noktasını çağırmalıdır ve biz yeni bir erişim belirteci geri alacak. Bu isteğin, yükün bir parçası olarak yenileme belirteci olacak, ancak bu yenileme belirteci, kullandığımızla aynı olmamalı mı? Ya da en azından aynı bitime sahip olmalı? Değilse, gerçekten, yenileme ömrü sonsuzdur.
Burada geçmek istediğim frisby.js sınamaları var, ancak Taiseer'in Web Api 2 için uygulamasının kullanılmasıyla, son beklenti başarısız oluyor. Bu belirteçle yeni bir son kullanma tarihi olan yeni bir yenileme jetonu alıyoruz.
'use strict';
var frisby = require('frisby');
var config = require('../test-config.json');
var args = config[process.env.test || 'local'];
var host = args.host,
clientId = args.clientId,
usr = args.user1,
pwd = args.password1;
frisby.create('Try and fail to get a protected resource')
.get(host + '/api/test')
.expectStatus(401)
.expectHeaderContains('WWW-Authenticate', 'bearer')
.toss();
frisby.create('Log in and get a protected resource')
.post(host + '/token', {
grant_type: 'password',
username: usr,
password: pwd,
client_id: clientId
})
.expectJSONTypes({
access_token: String,
token_type: String,
expires_in: Number,
userName: String,
refresh_token: String,
'as:client_id': String,
'.issued': String,
'.expires': String
})
.expectJSON({
token_type: 'bearer',
userName: '[email protected]'
})
.afterJSON(function (json) {
frisby.create('and now get protected resource with attached bearer token')
.get(host + '/api/test', {
headers: { 'Authorization': 'Bearer ' + json.access_token }
})
.expectStatus(200)
.toss();
frisby.create('and try to get a new access token with our refresh token')
.post(host + '/token', {
grant_type: 'refresh_token',
refresh_token: json.refresh_token,
client_id: clientId
})
.afterJSON(function (json2) {
//we should receive a new access token
expect(json.access_token).not.toEqual(json2.access_token);
//but shouldn't the refresh token remain the same until *it* expires?
expect(json.refresh_token).toEqual(json2.refresh_token);
})
.toss();
})
.toss();
Teşekkürler, Taiseer. Bu şeyler kolay değil, özellikle de Katana çerçevesi bizim adımıza çok fazla "sihir" yapıyorsa. Yine de kendimizi yazmaktan daha iyi. Devam etmekte olan çalışmalarımı repo'ma ittim - yenileme sağlayıcısı burada: https://github.com/finleysg/stats-api/blob/master/StatsApi/Providers/RefreshTokenProvider.cs. Şüphesiz hala naif ve yanlış, ama frisby testlerim geçiyor. Çıkış hakkında endişeleniyor musunuz? Hesap denetleyicisinde, oturum kapatma eyleminde bir kullanıcı için tüm yenileme simgelerini silen basit bir uygulama var. – Stuart
@Taiseer Joudeh, uygulamayı, yenileme jetonunun son kullanma tarihinden daha uzun bir süre boyunca kullanmadıysa, o zaman yenileme belirtecini kullanarak yeni erişim belirteci almaya çalıştığında 401 alır. Bu davranışı değiştirmek için tek yenileme belirteci tanımlayıcısını çıkarır ve kullanıcı yenileme belirtecini kullanarak yeni erişim belirteci istediğinde aynı tanımlayıcıyı döndürür. Bunu yapabilir miyim? Ayrıca, kullanıcının sonsuza kadar oturum açmasını istiyorum. bahar güvenliği oauth2. – KJEjava48